This commit is contained in:
Bronek
2025-09-04 01:57:28 -07:00
parent b8b68c1378
commit 0e329f6fe6
230 changed files with 13002 additions and 10989 deletions

View File

@@ -3014,324 +3014,381 @@ $(document).ready(function() { init_codefold(0); });
<div class="line"><a id="l02794" name="l02794"></a><span class="lineno"> 2794</span>}</div>
</div>
<div class="line"><a id="l02795" name="l02795"></a><span class="lineno"> 2795</span> </div>
<div class="line"><a id="l02796" name="l02796"></a><span class="lineno"> 2796</span>[[nodiscard]] STAmount</div>
<div class="line"><a id="l02796" name="l02796"></a><span class="lineno"> 2796</span>[[nodiscard]] <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;STAmount&gt;</a></div>
<div class="foldopen" id="foldopen02797" data-start="{" data-end="}">
<div class="line"><a id="l02797" name="l02797"></a><span class="lineno"><a class="line" href="namespaceripple.html#ad4f860310e3dfc97345c3b673f7cd5d7"> 2797</a></span><a class="code hl_function" href="namespaceripple.html#ad4f860310e3dfc97345c3b673f7cd5d7">assetsToSharesDeposit</a>(</div>
<div class="line"><a id="l02797" name="l02797"></a><span class="lineno"><a class="line" href="namespaceripple.html#a550c0c64a14f021fb311b1f2507e8ae4"> 2797</a></span><a class="code hl_function" href="namespaceripple.html#a550c0c64a14f021fb311b1f2507e8ae4">assetsToSharesDeposit</a>(</div>
<div class="line"><a id="l02798" name="l02798"></a><span class="lineno"> 2798</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; vault,</div>
<div class="line"><a id="l02799" name="l02799"></a><span class="lineno"> 2799</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; issuance,</div>
<div class="line"><a id="l02800" name="l02800"></a><span class="lineno"> 2800</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; assets)</div>
<div class="line"><a id="l02801" name="l02801"></a><span class="lineno"> 2801</span>{</div>
<div class="line"><a id="l02802" name="l02802"></a><span class="lineno"> 2802</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02803" name="l02803"></a><span class="lineno"> 2803</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault-&gt;at(sfAsset),</div>
<div class="line"><a id="l02804" name="l02804"></a><span class="lineno"> 2804</span> <span class="stringliteral">&quot;ripple::assetsToSharesDeposit : assets and vault match&quot;</span>);</div>
<div class="line"><a id="l02805" name="l02805"></a><span class="lineno"> 2805</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l02806" name="l02806"></a><span class="lineno"> 2806</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> shares{vault-&gt;at(sfShareMPTID), <span class="keyword">static_cast&lt;</span><a class="code hl_class" href="classripple_1_1Number.html">Number</a><span class="keyword">&gt;</span>(assets)};</div>
<div class="line"><a id="l02807" name="l02807"></a><span class="lineno"> 2807</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
<div class="line"><a id="l02808" name="l02808"></a><span class="lineno"> 2808</span> <span class="keywordflow">return</span> shares;</div>
<div class="line"><a id="l02809" name="l02809"></a><span class="lineno"> 2809</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance-&gt;at(sfOutstandingAmount);</div>
<div class="line"><a id="l02810" name="l02810"></a><span class="lineno"> 2810</span> shares = shareTotal * (assets / assetTotal);</div>
<div class="line"><a id="l02811" name="l02811"></a><span class="lineno"> 2811</span> <span class="keywordflow">return</span> shares;</div>
<div class="line"><a id="l02812" name="l02812"></a><span class="lineno"> 2812</span>}</div>
<div class="line"><a id="l02803" name="l02803"></a><span class="lineno"> 2803</span> !assets.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>(),</div>
<div class="line"><a id="l02804" name="l02804"></a><span class="lineno"> 2804</span> <span class="stringliteral">&quot;ripple::assetsToSharesDeposit : non-negative assets&quot;</span>);</div>
<div class="line"><a id="l02805" name="l02805"></a><span class="lineno"> 2805</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02806" name="l02806"></a><span class="lineno"> 2806</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault-&gt;at(sfAsset),</div>
<div class="line"><a id="l02807" name="l02807"></a><span class="lineno"> 2807</span> <span class="stringliteral">&quot;ripple::assetsToSharesDeposit : assets and vault match&quot;</span>);</div>
<div class="line"><a id="l02808" name="l02808"></a><span class="lineno"> 2808</span> <span class="keywordflow">if</span> (assets.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() || assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() != vault-&gt;at(sfAsset))</div>
<div class="line"><a id="l02809" name="l02809"></a><span class="lineno"> 2809</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l02810" name="l02810"></a><span class="lineno"> 2810</span> </div>
<div class="line"><a id="l02811" name="l02811"></a><span class="lineno"> 2811</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span> assetTotal = vault-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l02812" name="l02812"></a><span class="lineno"> 2812</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> shares{vault-&gt;at(sfShareMPTID)};</div>
<div class="line"><a id="l02813" name="l02813"></a><span class="lineno"> 2813</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
<div class="line"><a id="l02814" name="l02814"></a><span class="lineno"> 2814</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{</div>
<div class="line"><a id="l02815" name="l02815"></a><span class="lineno"> 2815</span> shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>(),</div>
<div class="line"><a id="l02816" name="l02816"></a><span class="lineno"> 2816</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a>(assets.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>(), assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() + vault-&gt;at(sfScale))</div>
<div class="line"><a id="l02817" name="l02817"></a><span class="lineno"> 2817</span> .<a class="code hl_function" href="classripple_1_1Number.html#a441d4a3d4e818af1c34478cefd219b16">truncate</a>()};</div>
<div class="line"><a id="l02818" name="l02818"></a><span class="lineno"> 2818</span> </div>
<div class="line"><a id="l02819" name="l02819"></a><span class="lineno"> 2819</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span> shareTotal = issuance-&gt;at(sfOutstandingAmount);</div>
<div class="line"><a id="l02820" name="l02820"></a><span class="lineno"> 2820</span> shares = (shareTotal * (assets / assetTotal)).truncate();</div>
<div class="line"><a id="l02821" name="l02821"></a><span class="lineno"> 2821</span> <span class="keywordflow">return</span> shares;</div>
<div class="line"><a id="l02822" name="l02822"></a><span class="lineno"> 2822</span>}</div>
</div>
<div class="line"><a id="l02813" name="l02813"></a><span class="lineno"> 2813</span> </div>
<div class="line"><a id="l02814" name="l02814"></a><span class="lineno"> 2814</span>[[nodiscard]] STAmount</div>
<div class="foldopen" id="foldopen02815" data-start="{" data-end="}">
<div class="line"><a id="l02815" name="l02815"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac527f4be8f38f42794ec9a8981c71f25"> 2815</a></span><a class="code hl_function" href="namespaceripple.html#ac527f4be8f38f42794ec9a8981c71f25">assetsToSharesWithdraw</a>(</div>
<div class="line"><a id="l02816" name="l02816"></a><span class="lineno"> 2816</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; vault,</div>
<div class="line"><a id="l02817" name="l02817"></a><span class="lineno"> 2817</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; issuance,</div>
<div class="line"><a id="l02818" name="l02818"></a><span class="lineno"> 2818</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; assets)</div>
<div class="line"><a id="l02819" name="l02819"></a><span class="lineno"> 2819</span>{</div>
<div class="line"><a id="l02820" name="l02820"></a><span class="lineno"> 2820</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02821" name="l02821"></a><span class="lineno"> 2821</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault-&gt;at(sfAsset),</div>
<div class="line"><a id="l02822" name="l02822"></a><span class="lineno"> 2822</span> <span class="stringliteral">&quot;ripple::assetsToSharesWithdraw : assets and vault match&quot;</span>);</div>
<div class="line"><a id="l02823" name="l02823"></a><span class="lineno"> 2823</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l02824" name="l02824"></a><span class="lineno"> 2824</span> assetTotal -= vault-&gt;at(sfLossUnrealized);</div>
<div class="line"><a id="l02825" name="l02825"></a><span class="lineno"> 2825</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> shares{vault-&gt;at(sfShareMPTID)};</div>
<div class="line"><a id="l02826" name="l02826"></a><span class="lineno"> 2826</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
<div class="line"><a id="l02827" name="l02827"></a><span class="lineno"> 2827</span> <span class="keywordflow">return</span> shares;</div>
<div class="line"><a id="l02828" name="l02828"></a><span class="lineno"> 2828</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance-&gt;at(sfOutstandingAmount);</div>
<div class="line"><a id="l02829" name="l02829"></a><span class="lineno"> 2829</span> shares = shareTotal * (assets / assetTotal);</div>
<div class="line"><a id="l02830" name="l02830"></a><span class="lineno"> 2830</span> <span class="keywordflow">return</span> shares;</div>
<div class="line"><a id="l02831" name="l02831"></a><span class="lineno"> 2831</span>}</div>
<div class="line"><a id="l02823" name="l02823"></a><span class="lineno"> 2823</span> </div>
<div class="line"><a id="l02824" name="l02824"></a><span class="lineno"> 2824</span>[[nodiscard]] <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;STAmount&gt;</a></div>
<div class="foldopen" id="foldopen02825" data-start="{" data-end="}">
<div class="line"><a id="l02825" name="l02825"></a><span class="lineno"><a class="line" href="namespaceripple.html#a27f27d96c4c3cfa4165d71c4b2266a46"> 2825</a></span><a class="code hl_function" href="namespaceripple.html#a27f27d96c4c3cfa4165d71c4b2266a46">sharesToAssetsDeposit</a>(</div>
<div class="line"><a id="l02826" name="l02826"></a><span class="lineno"> 2826</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; vault,</div>
<div class="line"><a id="l02827" name="l02827"></a><span class="lineno"> 2827</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; issuance,</div>
<div class="line"><a id="l02828" name="l02828"></a><span class="lineno"> 2828</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; shares)</div>
<div class="line"><a id="l02829" name="l02829"></a><span class="lineno"> 2829</span>{</div>
<div class="line"><a id="l02830" name="l02830"></a><span class="lineno"> 2830</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02831" name="l02831"></a><span class="lineno"> 2831</span> !shares.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>(),</div>
<div class="line"><a id="l02832" name="l02832"></a><span class="lineno"> 2832</span> <span class="stringliteral">&quot;ripple::sharesToAssetsDeposit : non-negative shares&quot;</span>);</div>
<div class="line"><a id="l02833" name="l02833"></a><span class="lineno"> 2833</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02834" name="l02834"></a><span class="lineno"> 2834</span> shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault-&gt;at(sfShareMPTID),</div>
<div class="line"><a id="l02835" name="l02835"></a><span class="lineno"> 2835</span> <span class="stringliteral">&quot;ripple::sharesToAssetsDeposit : shares and vault match&quot;</span>);</div>
<div class="line"><a id="l02836" name="l02836"></a><span class="lineno"> 2836</span> <span class="keywordflow">if</span> (shares.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() || shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() != vault-&gt;at(sfShareMPTID))</div>
<div class="line"><a id="l02837" name="l02837"></a><span class="lineno"> 2837</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l02838" name="l02838"></a><span class="lineno"> 2838</span> </div>
<div class="line"><a id="l02839" name="l02839"></a><span class="lineno"> 2839</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span> assetTotal = vault-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l02840" name="l02840"></a><span class="lineno"> 2840</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> assets{vault-&gt;at(sfAsset)};</div>
<div class="line"><a id="l02841" name="l02841"></a><span class="lineno"> 2841</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
<div class="line"><a id="l02842" name="l02842"></a><span class="lineno"> 2842</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{</div>
<div class="line"><a id="l02843" name="l02843"></a><span class="lineno"> 2843</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>(),</div>
<div class="line"><a id="l02844" name="l02844"></a><span class="lineno"> 2844</span> shares.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>(),</div>
<div class="line"><a id="l02845" name="l02845"></a><span class="lineno"> 2845</span> shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() - vault-&gt;at(sfScale),</div>
<div class="line"><a id="l02846" name="l02846"></a><span class="lineno"> 2846</span> <span class="keyword">false</span>};</div>
<div class="line"><a id="l02847" name="l02847"></a><span class="lineno"> 2847</span> </div>
<div class="line"><a id="l02848" name="l02848"></a><span class="lineno"> 2848</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span> shareTotal = issuance-&gt;at(sfOutstandingAmount);</div>
<div class="line"><a id="l02849" name="l02849"></a><span class="lineno"> 2849</span> assets = assetTotal * (shares / shareTotal);</div>
<div class="line"><a id="l02850" name="l02850"></a><span class="lineno"> 2850</span> <span class="keywordflow">return</span> assets;</div>
<div class="line"><a id="l02851" name="l02851"></a><span class="lineno"> 2851</span>}</div>
</div>
<div class="line"><a id="l02832" name="l02832"></a><span class="lineno"> 2832</span> </div>
<div class="line"><a id="l02833" name="l02833"></a><span class="lineno"> 2833</span>[[nodiscard]] STAmount</div>
<div class="foldopen" id="foldopen02834" data-start="{" data-end="}">
<div class="line"><a id="l02834" name="l02834"></a><span class="lineno"><a class="line" href="namespaceripple.html#a2538e2190b6fa5b9b2f10e74f64c905c"> 2834</a></span><a class="code hl_function" href="namespaceripple.html#a2538e2190b6fa5b9b2f10e74f64c905c">sharesToAssetsWithdraw</a>(</div>
<div class="line"><a id="l02835" name="l02835"></a><span class="lineno"> 2835</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; vault,</div>
<div class="line"><a id="l02836" name="l02836"></a><span class="lineno"> 2836</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; issuance,</div>
<div class="line"><a id="l02837" name="l02837"></a><span class="lineno"> 2837</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; shares)</div>
<div class="line"><a id="l02838" name="l02838"></a><span class="lineno"> 2838</span>{</div>
<div class="line"><a id="l02839" name="l02839"></a><span class="lineno"> 2839</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02840" name="l02840"></a><span class="lineno"> 2840</span> shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault-&gt;at(sfShareMPTID),</div>
<div class="line"><a id="l02841" name="l02841"></a><span class="lineno"> 2841</span> <span class="stringliteral">&quot;ripple::sharesToAssetsWithdraw : shares and vault match&quot;</span>);</div>
<div class="line"><a id="l02842" name="l02842"></a><span class="lineno"> 2842</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l02843" name="l02843"></a><span class="lineno"> 2843</span> assetTotal -= vault-&gt;at(sfLossUnrealized);</div>
<div class="line"><a id="l02844" name="l02844"></a><span class="lineno"> 2844</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> assets{vault-&gt;at(sfAsset)};</div>
<div class="line"><a id="l02845" name="l02845"></a><span class="lineno"> 2845</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
<div class="line"><a id="l02846" name="l02846"></a><span class="lineno"> 2846</span> <span class="keywordflow">return</span> assets;</div>
<div class="line"><a id="l02847" name="l02847"></a><span class="lineno"> 2847</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance-&gt;at(sfOutstandingAmount);</div>
<div class="line"><a id="l02848" name="l02848"></a><span class="lineno"> 2848</span> assets = assetTotal * (shares / shareTotal);</div>
<div class="line"><a id="l02849" name="l02849"></a><span class="lineno"> 2849</span> <span class="keywordflow">return</span> assets;</div>
<div class="line"><a id="l02850" name="l02850"></a><span class="lineno"> 2850</span>}</div>
</div>
<div class="line"><a id="l02851" name="l02851"></a><span class="lineno"> 2851</span> </div>
<div class="line"><a id="l02852" name="l02852"></a><span class="lineno"> 2852</span>TER</div>
<div class="foldopen" id="foldopen02853" data-start="{" data-end="}">
<div class="line"><a id="l02853" name="l02853"></a><span class="lineno"><a class="line" href="namespaceripple.html#a02de69480d9655456084663dc5d7c100"> 2853</a></span><a class="code hl_function" href="namespaceripple.html#a02de69480d9655456084663dc5d7c100">rippleLockEscrowMPT</a>(</div>
<div class="line"><a id="l02854" name="l02854"></a><span class="lineno"> 2854</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>&amp; view,</div>
<div class="line"><a id="l02855" name="l02855"></a><span class="lineno"> 2855</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; sender,</div>
<div class="line"><a id="l02856" name="l02856"></a><span class="lineno"> 2856</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="l02857" name="l02857"></a><span class="lineno"> 2857</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
<div class="line"><a id="l02858" name="l02858"></a><span class="lineno"> 2858</span>{</div>
<div class="line"><a id="l02859" name="l02859"></a><span class="lineno"> 2859</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptIssue = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">get</a>&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;();</div>
<div class="line"><a id="l02860" name="l02860"></a><span class="lineno"> 2860</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptID = keylet::mptIssuance(mptIssue.getMptID());</div>
<div class="line"><a id="l02861" name="l02861"></a><span class="lineno"> 2861</span> <span class="keyword">auto</span> sleIssuance = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptID);</div>
<div class="line"><a id="l02862" name="l02862"></a><span class="lineno"> 2862</span> <span class="keywordflow">if</span> (!sleIssuance)</div>
<div class="line"><a id="l02863" name="l02863"></a><span class="lineno"> 2863</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02864" name="l02864"></a><span class="lineno"> 2864</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: MPT issuance not found for &quot;</span></div>
<div class="line"><a id="l02865" name="l02865"></a><span class="lineno"> 2865</span> &lt;&lt; mptIssue.getMptID();</div>
<div class="line"><a id="l02866" name="l02866"></a><span class="lineno"> 2866</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>;</div>
<div class="line"><a id="l02867" name="l02867"></a><span class="lineno"> 2867</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02852" name="l02852"></a><span class="lineno"> 2852</span> </div>
<div class="line"><a id="l02853" name="l02853"></a><span class="lineno"> 2853</span>[[nodiscard]] <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;STAmount&gt;</a></div>
<div class="foldopen" id="foldopen02854" data-start="{" data-end="}">
<div class="line"><a id="l02854" name="l02854"></a><span class="lineno"><a class="line" href="namespaceripple.html#a5509de8022f2d9dddf3a87f524e3503b"> 2854</a></span><a class="code hl_function" href="namespaceripple.html#a5509de8022f2d9dddf3a87f524e3503b">assetsToSharesWithdraw</a>(</div>
<div class="line"><a id="l02855" name="l02855"></a><span class="lineno"> 2855</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; vault,</div>
<div class="line"><a id="l02856" name="l02856"></a><span class="lineno"> 2856</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; issuance,</div>
<div class="line"><a id="l02857" name="l02857"></a><span class="lineno"> 2857</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; assets,</div>
<div class="line"><a id="l02858" name="l02858"></a><span class="lineno"> 2858</span> <a class="code hl_enumeration" href="namespaceripple.html#ac52c3ab9078d3e039b86c985d50be183">TruncateShares</a> truncate)</div>
<div class="line"><a id="l02859" name="l02859"></a><span class="lineno"> 2859</span>{</div>
<div class="line"><a id="l02860" name="l02860"></a><span class="lineno"> 2860</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02861" name="l02861"></a><span class="lineno"> 2861</span> !assets.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>(),</div>
<div class="line"><a id="l02862" name="l02862"></a><span class="lineno"> 2862</span> <span class="stringliteral">&quot;ripple::assetsToSharesDeposit : non-negative assets&quot;</span>);</div>
<div class="line"><a id="l02863" name="l02863"></a><span class="lineno"> 2863</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02864" name="l02864"></a><span class="lineno"> 2864</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault-&gt;at(sfAsset),</div>
<div class="line"><a id="l02865" name="l02865"></a><span class="lineno"> 2865</span> <span class="stringliteral">&quot;ripple::assetsToSharesWithdraw : assets and vault match&quot;</span>);</div>
<div class="line"><a id="l02866" name="l02866"></a><span class="lineno"> 2866</span> <span class="keywordflow">if</span> (assets.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() || assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() != vault-&gt;at(sfAsset))</div>
<div class="line"><a id="l02867" name="l02867"></a><span class="lineno"> 2867</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l02868" name="l02868"></a><span class="lineno"> 2868</span> </div>
<div class="line"><a id="l02869" name="l02869"></a><span class="lineno"> 2869</span> <span class="keywordflow">if</span> (amount.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>() == sender)</div>
<div class="line"><a id="l02870" name="l02870"></a><span class="lineno"> 2870</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02871" name="l02871"></a><span class="lineno"> 2871</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02872" name="l02872"></a><span class="lineno"> 2872</span> &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: sender is the issuer, cannot lock MPTs.&quot;</span>;</div>
<div class="line"><a id="l02873" name="l02873"></a><span class="lineno"> 2873</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02874" name="l02874"></a><span class="lineno"> 2874</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02875" name="l02875"></a><span class="lineno"> 2875</span> </div>
<div class="line"><a id="l02876" name="l02876"></a><span class="lineno"> 2876</span> <span class="comment">// 1. Decrease the MPT Holder MPTAmount</span></div>
<div class="line"><a id="l02877" name="l02877"></a><span class="lineno"> 2877</span> <span class="comment">// 2. Increase the MPT Holder EscrowedAmount</span></div>
<div class="line"><a id="l02878" name="l02878"></a><span class="lineno"> 2878</span> {</div>
<div class="line"><a id="l02879" name="l02879"></a><span class="lineno"> 2879</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptokenID = keylet::mptoken(mptID.key, sender);</div>
<div class="line"><a id="l02880" name="l02880"></a><span class="lineno"> 2880</span> <span class="keyword">auto</span> sle = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptokenID);</div>
<div class="line"><a id="l02881" name="l02881"></a><span class="lineno"> 2881</span> <span class="keywordflow">if</span> (!sle)</div>
<div class="line"><a id="l02882" name="l02882"></a><span class="lineno"> 2882</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02883" name="l02883"></a><span class="lineno"> 2883</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02884" name="l02884"></a><span class="lineno"> 2884</span> &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: MPToken not found for &quot;</span> &lt;&lt; sender;</div>
<div class="line"><a id="l02885" name="l02885"></a><span class="lineno"> 2885</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>;</div>
<div class="line"><a id="l02886" name="l02886"></a><span class="lineno"> 2886</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02887" name="l02887"></a><span class="lineno"> 2887</span> </div>
<div class="line"><a id="l02888" name="l02888"></a><span class="lineno"> 2888</span> <span class="keyword">auto</span> <span class="keyword">const</span> amt = sle-&gt;getFieldU64(sfMPTAmount);</div>
<div class="line"><a id="l02889" name="l02889"></a><span class="lineno"> 2889</span> <span class="keyword">auto</span> <span class="keyword">const</span> pay = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l02890" name="l02890"></a><span class="lineno"> 2890</span> </div>
<div class="line"><a id="l02891" name="l02891"></a><span class="lineno"> 2891</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l02892" name="l02892"></a><span class="lineno"> 2892</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, amt), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, pay)))</div>
<div class="line"><a id="l02893" name="l02893"></a><span class="lineno"> 2893</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02894" name="l02894"></a><span class="lineno"> 2894</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02895" name="l02895"></a><span class="lineno"> 2895</span> &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: insufficient MPTAmount for &quot;</span></div>
<div class="line"><a id="l02896" name="l02896"></a><span class="lineno"> 2896</span> &lt;&lt; to_string(sender) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; amt &lt;&lt; <span class="stringliteral">&quot; &lt; &quot;</span> &lt;&lt; pay;</div>
<div class="line"><a id="l02897" name="l02897"></a><span class="lineno"> 2897</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02898" name="l02898"></a><span class="lineno"> 2898</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02899" name="l02899"></a><span class="lineno"> 2899</span> </div>
<div class="line"><a id="l02900" name="l02900"></a><span class="lineno"> 2900</span> (*sle)[sfMPTAmount] = amt - pay;</div>
<div class="line"><a id="l02901" name="l02901"></a><span class="lineno"> 2901</span> </div>
<div class="line"><a id="l02902" name="l02902"></a><span class="lineno"> 2902</span> <span class="comment">// Overflow check for addition</span></div>
<div class="line"><a id="l02903" name="l02903"></a><span class="lineno"> 2903</span> uint64_t <span class="keyword">const</span> locked = (*sle)[~sfLockedAmount].value_or(0);</div>
<div class="line"><a id="l02904" name="l02904"></a><span class="lineno"> 2904</span> </div>
<div class="line"><a id="l02905" name="l02905"></a><span class="lineno"> 2905</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe">canAdd</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, locked), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, pay)))</div>
<div class="line"><a id="l02906" name="l02906"></a><span class="lineno"> 2906</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02907" name="l02907"></a><span class="lineno"> 2907</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02908" name="l02908"></a><span class="lineno"> 2908</span> &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: overflow on locked amount for &quot;</span></div>
<div class="line"><a id="l02909" name="l02909"></a><span class="lineno"> 2909</span> &lt;&lt; to_string(sender) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; locked &lt;&lt; <span class="stringliteral">&quot; + &quot;</span> &lt;&lt; pay;</div>
<div class="line"><a id="l02910" name="l02910"></a><span class="lineno"> 2910</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02911" name="l02911"></a><span class="lineno"> 2911</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02912" name="l02912"></a><span class="lineno"> 2912</span> </div>
<div class="line"><a id="l02913" name="l02913"></a><span class="lineno"> 2913</span> <span class="keywordflow">if</span> (sle-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l02914" name="l02914"></a><span class="lineno"> 2914</span> (*sle)[sfLockedAmount] += pay;</div>
<div class="line"><a id="l02915" name="l02915"></a><span class="lineno"> 2915</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l02916" name="l02916"></a><span class="lineno"> 2916</span> sle-&gt;setFieldU64(sfLockedAmount, pay);</div>
<div class="line"><a id="l02917" name="l02917"></a><span class="lineno"> 2917</span> </div>
<div class="line"><a id="l02918" name="l02918"></a><span class="lineno"> 2918</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sle);</div>
<div class="line"><a id="l02919" name="l02919"></a><span class="lineno"> 2919</span> }</div>
<div class="line"><a id="l02920" name="l02920"></a><span class="lineno"> 2920</span> </div>
<div class="line"><a id="l02921" name="l02921"></a><span class="lineno"> 2921</span> <span class="comment">// 1. Increase the Issuance EscrowedAmount</span></div>
<div class="line"><a id="l02922" name="l02922"></a><span class="lineno"> 2922</span> <span class="comment">// 2. DO NOT change the Issuance OutstandingAmount</span></div>
<div class="line"><a id="l02923" name="l02923"></a><span class="lineno"> 2923</span> {</div>
<div class="line"><a id="l02924" name="l02924"></a><span class="lineno"> 2924</span> uint64_t <span class="keyword">const</span> issuanceEscrowed =</div>
<div class="line"><a id="l02925" name="l02925"></a><span class="lineno"> 2925</span> (*sleIssuance)[~sfLockedAmount].value_or(0);</div>
<div class="line"><a id="l02926" name="l02926"></a><span class="lineno"> 2926</span> <span class="keyword">auto</span> <span class="keyword">const</span> pay = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l02927" name="l02927"></a><span class="lineno"> 2927</span> </div>
<div class="line"><a id="l02928" name="l02928"></a><span class="lineno"> 2928</span> <span class="comment">// Overflow check for addition</span></div>
<div class="line"><a id="l02929" name="l02929"></a><span class="lineno"> 2929</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe">canAdd</a>(</div>
<div class="line"><a id="l02930" name="l02930"></a><span class="lineno"> 2930</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, issuanceEscrowed), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, pay)))</div>
<div class="line"><a id="l02931" name="l02931"></a><span class="lineno"> 2931</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02932" name="l02932"></a><span class="lineno"> 2932</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: overflow on issuance &quot;</span></div>
<div class="line"><a id="l02933" name="l02933"></a><span class="lineno"> 2933</span> <span class="stringliteral">&quot;locked amount for &quot;</span></div>
<div class="line"><a id="l02934" name="l02934"></a><span class="lineno"> 2934</span> &lt;&lt; mptIssue.getMptID() &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; issuanceEscrowed</div>
<div class="line"><a id="l02935" name="l02935"></a><span class="lineno"> 2935</span> &lt;&lt; <span class="stringliteral">&quot; + &quot;</span> &lt;&lt; pay;</div>
<div class="line"><a id="l02936" name="l02936"></a><span class="lineno"> 2936</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02937" name="l02937"></a><span class="lineno"> 2937</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02938" name="l02938"></a><span class="lineno"> 2938</span> </div>
<div class="line"><a id="l02939" name="l02939"></a><span class="lineno"> 2939</span> <span class="keywordflow">if</span> (sleIssuance-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l02940" name="l02940"></a><span class="lineno"> 2940</span> (*sleIssuance)[sfLockedAmount] += pay;</div>
<div class="line"><a id="l02941" name="l02941"></a><span class="lineno"> 2941</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l02942" name="l02942"></a><span class="lineno"> 2942</span> sleIssuance-&gt;setFieldU64(sfLockedAmount, pay);</div>
<div class="line"><a id="l02943" name="l02943"></a><span class="lineno"> 2943</span> </div>
<div class="line"><a id="l02944" name="l02944"></a><span class="lineno"> 2944</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l02945" name="l02945"></a><span class="lineno"> 2945</span> }</div>
<div class="line"><a id="l02946" name="l02946"></a><span class="lineno"> 2946</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l02947" name="l02947"></a><span class="lineno"> 2947</span>}</div>
<div class="line"><a id="l02869" name="l02869"></a><span class="lineno"> 2869</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l02870" name="l02870"></a><span class="lineno"> 2870</span> assetTotal -= vault-&gt;at(sfLossUnrealized);</div>
<div class="line"><a id="l02871" name="l02871"></a><span class="lineno"> 2871</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> shares{vault-&gt;at(sfShareMPTID)};</div>
<div class="line"><a id="l02872" name="l02872"></a><span class="lineno"> 2872</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
<div class="line"><a id="l02873" name="l02873"></a><span class="lineno"> 2873</span> <span class="keywordflow">return</span> shares;</div>
<div class="line"><a id="l02874" name="l02874"></a><span class="lineno"> 2874</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span> shareTotal = issuance-&gt;at(sfOutstandingAmount);</div>
<div class="line"><a id="l02875" name="l02875"></a><span class="lineno"> 2875</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> result = shareTotal * (assets / assetTotal);</div>
<div class="line"><a id="l02876" name="l02876"></a><span class="lineno"> 2876</span> <span class="keywordflow">if</span> (truncate == TruncateShares::yes)</div>
<div class="line"><a id="l02877" name="l02877"></a><span class="lineno"> 2877</span> result = result.<a class="code hl_function" href="classripple_1_1Number.html#a441d4a3d4e818af1c34478cefd219b16">truncate</a>();</div>
<div class="line"><a id="l02878" name="l02878"></a><span class="lineno"> 2878</span> shares = result;</div>
<div class="line"><a id="l02879" name="l02879"></a><span class="lineno"> 2879</span> <span class="keywordflow">return</span> shares;</div>
<div class="line"><a id="l02880" name="l02880"></a><span class="lineno"> 2880</span>}</div>
</div>
<div class="line"><a id="l02948" name="l02948"></a><span class="lineno"> 2948</span> </div>
<div class="line"><a id="l02949" name="l02949"></a><span class="lineno"> 2949</span>TER</div>
<div class="foldopen" id="foldopen02950" data-start="{" data-end="}">
<div class="line"><a id="l02950" name="l02950"></a><span class="lineno"><a class="line" href="namespaceripple.html#a83da4b11e236a23156ac525c94494dcf"> 2950</a></span><a class="code hl_function" href="namespaceripple.html#a83da4b11e236a23156ac525c94494dcf">rippleUnlockEscrowMPT</a>(</div>
<div class="line"><a id="l02951" name="l02951"></a><span class="lineno"> 2951</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>&amp; view,</div>
<div class="line"><a id="l02952" name="l02952"></a><span class="lineno"> 2952</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; sender,</div>
<div class="line"><a id="l02953" name="l02953"></a><span class="lineno"> 2953</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; receiver,</div>
<div class="line"><a id="l02954" name="l02954"></a><span class="lineno"> 2954</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="l02955" name="l02955"></a><span class="lineno"> 2955</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
<div class="line"><a id="l02956" name="l02956"></a><span class="lineno"> 2956</span>{</div>
<div class="line"><a id="l02957" name="l02957"></a><span class="lineno"> 2957</span> <span class="keyword">auto</span> <span class="keyword">const</span> issuer = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>();</div>
<div class="line"><a id="l02958" name="l02958"></a><span class="lineno"> 2958</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptIssue = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">get</a>&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;();</div>
<div class="line"><a id="l02959" name="l02959"></a><span class="lineno"> 2959</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptID = keylet::mptIssuance(mptIssue.getMptID());</div>
<div class="line"><a id="l02960" name="l02960"></a><span class="lineno"> 2960</span> <span class="keyword">auto</span> sleIssuance = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptID);</div>
<div class="line"><a id="l02961" name="l02961"></a><span class="lineno"> 2961</span> <span class="keywordflow">if</span> (!sleIssuance)</div>
<div class="line"><a id="l02962" name="l02962"></a><span class="lineno"> 2962</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02963" name="l02963"></a><span class="lineno"> 2963</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: MPT issuance not found for &quot;</span></div>
<div class="line"><a id="l02964" name="l02964"></a><span class="lineno"> 2964</span> &lt;&lt; mptIssue.getMptID();</div>
<div class="line"><a id="l02965" name="l02965"></a><span class="lineno"> 2965</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>;</div>
<div class="line"><a id="l02966" name="l02966"></a><span class="lineno"> 2966</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02881" name="l02881"></a><span class="lineno"> 2881</span> </div>
<div class="line"><a id="l02882" name="l02882"></a><span class="lineno"> 2882</span>[[nodiscard]] <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;STAmount&gt;</a></div>
<div class="foldopen" id="foldopen02883" data-start="{" data-end="}">
<div class="line"><a id="l02883" name="l02883"></a><span class="lineno"><a class="line" href="namespaceripple.html#a7db8820410ffa3288079a33bc00109ac"> 2883</a></span><a class="code hl_function" href="namespaceripple.html#a7db8820410ffa3288079a33bc00109ac">sharesToAssetsWithdraw</a>(</div>
<div class="line"><a id="l02884" name="l02884"></a><span class="lineno"> 2884</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; vault,</div>
<div class="line"><a id="l02885" name="l02885"></a><span class="lineno"> 2885</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; issuance,</div>
<div class="line"><a id="l02886" name="l02886"></a><span class="lineno"> 2886</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; shares)</div>
<div class="line"><a id="l02887" name="l02887"></a><span class="lineno"> 2887</span>{</div>
<div class="line"><a id="l02888" name="l02888"></a><span class="lineno"> 2888</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02889" name="l02889"></a><span class="lineno"> 2889</span> !shares.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>(),</div>
<div class="line"><a id="l02890" name="l02890"></a><span class="lineno"> 2890</span> <span class="stringliteral">&quot;ripple::sharesToAssetsDeposit : non-negative shares&quot;</span>);</div>
<div class="line"><a id="l02891" name="l02891"></a><span class="lineno"> 2891</span> XRPL_ASSERT(</div>
<div class="line"><a id="l02892" name="l02892"></a><span class="lineno"> 2892</span> shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault-&gt;at(sfShareMPTID),</div>
<div class="line"><a id="l02893" name="l02893"></a><span class="lineno"> 2893</span> <span class="stringliteral">&quot;ripple::sharesToAssetsWithdraw : shares and vault match&quot;</span>);</div>
<div class="line"><a id="l02894" name="l02894"></a><span class="lineno"> 2894</span> <span class="keywordflow">if</span> (shares.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() || shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() != vault-&gt;at(sfShareMPTID))</div>
<div class="line"><a id="l02895" name="l02895"></a><span class="lineno"> 2895</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l02896" name="l02896"></a><span class="lineno"> 2896</span> </div>
<div class="line"><a id="l02897" name="l02897"></a><span class="lineno"> 2897</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l02898" name="l02898"></a><span class="lineno"> 2898</span> assetTotal -= vault-&gt;at(sfLossUnrealized);</div>
<div class="line"><a id="l02899" name="l02899"></a><span class="lineno"> 2899</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> assets{vault-&gt;at(sfAsset)};</div>
<div class="line"><a id="l02900" name="l02900"></a><span class="lineno"> 2900</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
<div class="line"><a id="l02901" name="l02901"></a><span class="lineno"> 2901</span> <span class="keywordflow">return</span> assets;</div>
<div class="line"><a id="l02902" name="l02902"></a><span class="lineno"> 2902</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span> shareTotal = issuance-&gt;at(sfOutstandingAmount);</div>
<div class="line"><a id="l02903" name="l02903"></a><span class="lineno"> 2903</span> assets = assetTotal * (shares / shareTotal);</div>
<div class="line"><a id="l02904" name="l02904"></a><span class="lineno"> 2904</span> <span class="keywordflow">return</span> assets;</div>
<div class="line"><a id="l02905" name="l02905"></a><span class="lineno"> 2905</span>}</div>
</div>
<div class="line"><a id="l02906" name="l02906"></a><span class="lineno"> 2906</span> </div>
<div class="line"><a id="l02907" name="l02907"></a><span class="lineno"> 2907</span>TER</div>
<div class="foldopen" id="foldopen02908" data-start="{" data-end="}">
<div class="line"><a id="l02908" name="l02908"></a><span class="lineno"><a class="line" href="namespaceripple.html#a02de69480d9655456084663dc5d7c100"> 2908</a></span><a class="code hl_function" href="namespaceripple.html#a02de69480d9655456084663dc5d7c100">rippleLockEscrowMPT</a>(</div>
<div class="line"><a id="l02909" name="l02909"></a><span class="lineno"> 2909</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>&amp; view,</div>
<div class="line"><a id="l02910" name="l02910"></a><span class="lineno"> 2910</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; sender,</div>
<div class="line"><a id="l02911" name="l02911"></a><span class="lineno"> 2911</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="l02912" name="l02912"></a><span class="lineno"> 2912</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
<div class="line"><a id="l02913" name="l02913"></a><span class="lineno"> 2913</span>{</div>
<div class="line"><a id="l02914" name="l02914"></a><span class="lineno"> 2914</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptIssue = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">get</a>&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;();</div>
<div class="line"><a id="l02915" name="l02915"></a><span class="lineno"> 2915</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptID = keylet::mptIssuance(mptIssue.getMptID());</div>
<div class="line"><a id="l02916" name="l02916"></a><span class="lineno"> 2916</span> <span class="keyword">auto</span> sleIssuance = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptID);</div>
<div class="line"><a id="l02917" name="l02917"></a><span class="lineno"> 2917</span> <span class="keywordflow">if</span> (!sleIssuance)</div>
<div class="line"><a id="l02918" name="l02918"></a><span class="lineno"> 2918</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02919" name="l02919"></a><span class="lineno"> 2919</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: MPT issuance not found for &quot;</span></div>
<div class="line"><a id="l02920" name="l02920"></a><span class="lineno"> 2920</span> &lt;&lt; mptIssue.getMptID();</div>
<div class="line"><a id="l02921" name="l02921"></a><span class="lineno"> 2921</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>;</div>
<div class="line"><a id="l02922" name="l02922"></a><span class="lineno"> 2922</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02923" name="l02923"></a><span class="lineno"> 2923</span> </div>
<div class="line"><a id="l02924" name="l02924"></a><span class="lineno"> 2924</span> <span class="keywordflow">if</span> (amount.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>() == sender)</div>
<div class="line"><a id="l02925" name="l02925"></a><span class="lineno"> 2925</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02926" name="l02926"></a><span class="lineno"> 2926</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02927" name="l02927"></a><span class="lineno"> 2927</span> &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: sender is the issuer, cannot lock MPTs.&quot;</span>;</div>
<div class="line"><a id="l02928" name="l02928"></a><span class="lineno"> 2928</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02929" name="l02929"></a><span class="lineno"> 2929</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02930" name="l02930"></a><span class="lineno"> 2930</span> </div>
<div class="line"><a id="l02931" name="l02931"></a><span class="lineno"> 2931</span> <span class="comment">// 1. Decrease the MPT Holder MPTAmount</span></div>
<div class="line"><a id="l02932" name="l02932"></a><span class="lineno"> 2932</span> <span class="comment">// 2. Increase the MPT Holder EscrowedAmount</span></div>
<div class="line"><a id="l02933" name="l02933"></a><span class="lineno"> 2933</span> {</div>
<div class="line"><a id="l02934" name="l02934"></a><span class="lineno"> 2934</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptokenID = keylet::mptoken(mptID.key, sender);</div>
<div class="line"><a id="l02935" name="l02935"></a><span class="lineno"> 2935</span> <span class="keyword">auto</span> sle = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptokenID);</div>
<div class="line"><a id="l02936" name="l02936"></a><span class="lineno"> 2936</span> <span class="keywordflow">if</span> (!sle)</div>
<div class="line"><a id="l02937" name="l02937"></a><span class="lineno"> 2937</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02938" name="l02938"></a><span class="lineno"> 2938</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02939" name="l02939"></a><span class="lineno"> 2939</span> &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: MPToken not found for &quot;</span> &lt;&lt; sender;</div>
<div class="line"><a id="l02940" name="l02940"></a><span class="lineno"> 2940</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>;</div>
<div class="line"><a id="l02941" name="l02941"></a><span class="lineno"> 2941</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02942" name="l02942"></a><span class="lineno"> 2942</span> </div>
<div class="line"><a id="l02943" name="l02943"></a><span class="lineno"> 2943</span> <span class="keyword">auto</span> <span class="keyword">const</span> amt = sle-&gt;getFieldU64(sfMPTAmount);</div>
<div class="line"><a id="l02944" name="l02944"></a><span class="lineno"> 2944</span> <span class="keyword">auto</span> <span class="keyword">const</span> pay = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l02945" name="l02945"></a><span class="lineno"> 2945</span> </div>
<div class="line"><a id="l02946" name="l02946"></a><span class="lineno"> 2946</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l02947" name="l02947"></a><span class="lineno"> 2947</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, amt), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, pay)))</div>
<div class="line"><a id="l02948" name="l02948"></a><span class="lineno"> 2948</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02949" name="l02949"></a><span class="lineno"> 2949</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02950" name="l02950"></a><span class="lineno"> 2950</span> &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: insufficient MPTAmount for &quot;</span></div>
<div class="line"><a id="l02951" name="l02951"></a><span class="lineno"> 2951</span> &lt;&lt; to_string(sender) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; amt &lt;&lt; <span class="stringliteral">&quot; &lt; &quot;</span> &lt;&lt; pay;</div>
<div class="line"><a id="l02952" name="l02952"></a><span class="lineno"> 2952</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02953" name="l02953"></a><span class="lineno"> 2953</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02954" name="l02954"></a><span class="lineno"> 2954</span> </div>
<div class="line"><a id="l02955" name="l02955"></a><span class="lineno"> 2955</span> (*sle)[sfMPTAmount] = amt - pay;</div>
<div class="line"><a id="l02956" name="l02956"></a><span class="lineno"> 2956</span> </div>
<div class="line"><a id="l02957" name="l02957"></a><span class="lineno"> 2957</span> <span class="comment">// Overflow check for addition</span></div>
<div class="line"><a id="l02958" name="l02958"></a><span class="lineno"> 2958</span> uint64_t <span class="keyword">const</span> locked = (*sle)[~sfLockedAmount].value_or(0);</div>
<div class="line"><a id="l02959" name="l02959"></a><span class="lineno"> 2959</span> </div>
<div class="line"><a id="l02960" name="l02960"></a><span class="lineno"> 2960</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe">canAdd</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, locked), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, pay)))</div>
<div class="line"><a id="l02961" name="l02961"></a><span class="lineno"> 2961</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02962" name="l02962"></a><span class="lineno"> 2962</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02963" name="l02963"></a><span class="lineno"> 2963</span> &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: overflow on locked amount for &quot;</span></div>
<div class="line"><a id="l02964" name="l02964"></a><span class="lineno"> 2964</span> &lt;&lt; to_string(sender) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; locked &lt;&lt; <span class="stringliteral">&quot; + &quot;</span> &lt;&lt; pay;</div>
<div class="line"><a id="l02965" name="l02965"></a><span class="lineno"> 2965</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02966" name="l02966"></a><span class="lineno"> 2966</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02967" name="l02967"></a><span class="lineno"> 2967</span> </div>
<div class="line"><a id="l02968" name="l02968"></a><span class="lineno"> 2968</span> <span class="comment">// Decrease the Issuance EscrowedAmount</span></div>
<div class="line"><a id="l02969" name="l02969"></a><span class="lineno"> 2969</span> {</div>
<div class="line"><a id="l02970" name="l02970"></a><span class="lineno"> 2970</span> <span class="keywordflow">if</span> (!sleIssuance-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l02971" name="l02971"></a><span class="lineno"> 2971</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02972" name="l02972"></a><span class="lineno"> 2972</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02973" name="l02973"></a><span class="lineno"> 2973</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: no locked amount in issuance for &quot;</span></div>
<div class="line"><a id="l02974" name="l02974"></a><span class="lineno"> 2974</span> &lt;&lt; mptIssue.getMptID();</div>
<div class="line"><a id="l02975" name="l02975"></a><span class="lineno"> 2975</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02976" name="l02976"></a><span class="lineno"> 2976</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02977" name="l02977"></a><span class="lineno"> 2977</span> </div>
<div class="line"><a id="l02978" name="l02978"></a><span class="lineno"> 2978</span> <span class="keyword">auto</span> <span class="keyword">const</span> locked = sleIssuance-&gt;getFieldU64(sfLockedAmount);</div>
<div class="line"><a id="l02979" name="l02979"></a><span class="lineno"> 2979</span> <span class="keyword">auto</span> <span class="keyword">const</span> redeem = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l02980" name="l02980"></a><span class="lineno"> 2980</span> </div>
<div class="line"><a id="l02981" name="l02981"></a><span class="lineno"> 2981</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l02982" name="l02982"></a><span class="lineno"> 2982</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(</div>
<div class="line"><a id="l02983" name="l02983"></a><span class="lineno"> 2983</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, locked), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, redeem)))</div>
<div class="line"><a id="l02984" name="l02984"></a><span class="lineno"> 2984</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02985" name="l02985"></a><span class="lineno"> 2985</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l02986" name="l02986"></a><span class="lineno"> 2986</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient locked amount for &quot;</span></div>
<div class="line"><a id="l02987" name="l02987"></a><span class="lineno"> 2987</span> &lt;&lt; mptIssue.getMptID() &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; locked &lt;&lt; <span class="stringliteral">&quot; &lt; &quot;</span> &lt;&lt; redeem;</div>
<div class="line"><a id="l02988" name="l02988"></a><span class="lineno"> 2988</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02989" name="l02989"></a><span class="lineno"> 2989</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02990" name="l02990"></a><span class="lineno"> 2990</span> </div>
<div class="line"><a id="l02991" name="l02991"></a><span class="lineno"> 2991</span> <span class="keyword">auto</span> <span class="keyword">const</span> newLocked = locked - redeem;</div>
<div class="line"><a id="l02992" name="l02992"></a><span class="lineno"> 2992</span> <span class="keywordflow">if</span> (newLocked == 0)</div>
<div class="line"><a id="l02993" name="l02993"></a><span class="lineno"> 2993</span> sleIssuance-&gt;makeFieldAbsent(sfLockedAmount);</div>
<div class="line"><a id="l02994" name="l02994"></a><span class="lineno"> 2994</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l02995" name="l02995"></a><span class="lineno"> 2995</span> sleIssuance-&gt;setFieldU64(sfLockedAmount, newLocked);</div>
<div class="line"><a id="l02996" name="l02996"></a><span class="lineno"> 2996</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l02997" name="l02997"></a><span class="lineno"> 2997</span> }</div>
<div class="line"><a id="l02968" name="l02968"></a><span class="lineno"> 2968</span> <span class="keywordflow">if</span> (sle-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l02969" name="l02969"></a><span class="lineno"> 2969</span> (*sle)[sfLockedAmount] += pay;</div>
<div class="line"><a id="l02970" name="l02970"></a><span class="lineno"> 2970</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l02971" name="l02971"></a><span class="lineno"> 2971</span> sle-&gt;setFieldU64(sfLockedAmount, pay);</div>
<div class="line"><a id="l02972" name="l02972"></a><span class="lineno"> 2972</span> </div>
<div class="line"><a id="l02973" name="l02973"></a><span class="lineno"> 2973</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sle);</div>
<div class="line"><a id="l02974" name="l02974"></a><span class="lineno"> 2974</span> }</div>
<div class="line"><a id="l02975" name="l02975"></a><span class="lineno"> 2975</span> </div>
<div class="line"><a id="l02976" name="l02976"></a><span class="lineno"> 2976</span> <span class="comment">// 1. Increase the Issuance EscrowedAmount</span></div>
<div class="line"><a id="l02977" name="l02977"></a><span class="lineno"> 2977</span> <span class="comment">// 2. DO NOT change the Issuance OutstandingAmount</span></div>
<div class="line"><a id="l02978" name="l02978"></a><span class="lineno"> 2978</span> {</div>
<div class="line"><a id="l02979" name="l02979"></a><span class="lineno"> 2979</span> uint64_t <span class="keyword">const</span> issuanceEscrowed =</div>
<div class="line"><a id="l02980" name="l02980"></a><span class="lineno"> 2980</span> (*sleIssuance)[~sfLockedAmount].value_or(0);</div>
<div class="line"><a id="l02981" name="l02981"></a><span class="lineno"> 2981</span> <span class="keyword">auto</span> <span class="keyword">const</span> pay = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l02982" name="l02982"></a><span class="lineno"> 2982</span> </div>
<div class="line"><a id="l02983" name="l02983"></a><span class="lineno"> 2983</span> <span class="comment">// Overflow check for addition</span></div>
<div class="line"><a id="l02984" name="l02984"></a><span class="lineno"> 2984</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe">canAdd</a>(</div>
<div class="line"><a id="l02985" name="l02985"></a><span class="lineno"> 2985</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, issuanceEscrowed), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, pay)))</div>
<div class="line"><a id="l02986" name="l02986"></a><span class="lineno"> 2986</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l02987" name="l02987"></a><span class="lineno"> 2987</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;rippleLockEscrowMPT: overflow on issuance &quot;</span></div>
<div class="line"><a id="l02988" name="l02988"></a><span class="lineno"> 2988</span> <span class="stringliteral">&quot;locked amount for &quot;</span></div>
<div class="line"><a id="l02989" name="l02989"></a><span class="lineno"> 2989</span> &lt;&lt; mptIssue.getMptID() &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; issuanceEscrowed</div>
<div class="line"><a id="l02990" name="l02990"></a><span class="lineno"> 2990</span> &lt;&lt; <span class="stringliteral">&quot; + &quot;</span> &lt;&lt; pay;</div>
<div class="line"><a id="l02991" name="l02991"></a><span class="lineno"> 2991</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l02992" name="l02992"></a><span class="lineno"> 2992</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02993" name="l02993"></a><span class="lineno"> 2993</span> </div>
<div class="line"><a id="l02994" name="l02994"></a><span class="lineno"> 2994</span> <span class="keywordflow">if</span> (sleIssuance-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l02995" name="l02995"></a><span class="lineno"> 2995</span> (*sleIssuance)[sfLockedAmount] += pay;</div>
<div class="line"><a id="l02996" name="l02996"></a><span class="lineno"> 2996</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l02997" name="l02997"></a><span class="lineno"> 2997</span> sleIssuance-&gt;setFieldU64(sfLockedAmount, pay);</div>
<div class="line"><a id="l02998" name="l02998"></a><span class="lineno"> 2998</span> </div>
<div class="line"><a id="l02999" name="l02999"></a><span class="lineno"> 2999</span> <span class="keywordflow">if</span> (issuer != receiver)</div>
<div class="line"><a id="l03000" name="l03000"></a><span class="lineno"> 3000</span> {</div>
<div class="line"><a id="l03001" name="l03001"></a><span class="lineno"> 3001</span> <span class="comment">// Increase the MPT Holder MPTAmount</span></div>
<div class="line"><a id="l03002" name="l03002"></a><span class="lineno"> 3002</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptokenID = keylet::mptoken(mptID.key, receiver);</div>
<div class="line"><a id="l03003" name="l03003"></a><span class="lineno"> 3003</span> <span class="keyword">auto</span> sle = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptokenID);</div>
<div class="line"><a id="l03004" name="l03004"></a><span class="lineno"> 3004</span> <span class="keywordflow">if</span> (!sle)</div>
<div class="line"><a id="l03005" name="l03005"></a><span class="lineno"> 3005</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03006" name="l03006"></a><span class="lineno"> 3006</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03007" name="l03007"></a><span class="lineno"> 3007</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: MPToken not found for &quot;</span> &lt;&lt; receiver;</div>
<div class="line"><a id="l03008" name="l03008"></a><span class="lineno"> 3008</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l03009" name="l03009"></a><span class="lineno"> 3009</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03010" name="l03010"></a><span class="lineno"> 3010</span> </div>
<div class="line"><a id="l03011" name="l03011"></a><span class="lineno"> 3011</span> <span class="keyword">auto</span> <a class="code hl_enumvalue" href="namespaceripple.html#a6434c1a0fd22b77e2e4a228c0eca79eba43b5c9175984c071f30b873fdce0a000">current</a> = sle-&gt;getFieldU64(sfMPTAmount);</div>
<div class="line"><a id="l03012" name="l03012"></a><span class="lineno"> 3012</span> <span class="keyword">auto</span> delta = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l03013" name="l03013"></a><span class="lineno"> 3013</span> </div>
<div class="line"><a id="l03014" name="l03014"></a><span class="lineno"> 3014</span> <span class="comment">// Overflow check for addition</span></div>
<div class="line"><a id="l03015" name="l03015"></a><span class="lineno"> 3015</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe">canAdd</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, <a class="code hl_enumvalue" href="namespaceripple.html#a6434c1a0fd22b77e2e4a228c0eca79eba43b5c9175984c071f30b873fdce0a000">current</a>), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, delta)))</div>
<div class="line"><a id="l03016" name="l03016"></a><span class="lineno"> 3016</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03017" name="l03017"></a><span class="lineno"> 3017</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03018" name="l03018"></a><span class="lineno"> 3018</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: overflow on MPTAmount for &quot;</span></div>
<div class="line"><a id="l03019" name="l03019"></a><span class="lineno"> 3019</span> &lt;&lt; to_string(receiver) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; <a class="code hl_enumvalue" href="namespaceripple.html#a6434c1a0fd22b77e2e4a228c0eca79eba43b5c9175984c071f30b873fdce0a000">current</a> &lt;&lt; <span class="stringliteral">&quot; + &quot;</span> &lt;&lt; delta;</div>
<div class="line"><a id="l03020" name="l03020"></a><span class="lineno"> 3020</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03021" name="l03021"></a><span class="lineno"> 3021</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l02999" name="l02999"></a><span class="lineno"> 2999</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l03000" name="l03000"></a><span class="lineno"> 3000</span> }</div>
<div class="line"><a id="l03001" name="l03001"></a><span class="lineno"> 3001</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l03002" name="l03002"></a><span class="lineno"> 3002</span>}</div>
</div>
<div class="line"><a id="l03003" name="l03003"></a><span class="lineno"> 3003</span> </div>
<div class="line"><a id="l03004" name="l03004"></a><span class="lineno"> 3004</span>TER</div>
<div class="foldopen" id="foldopen03005" data-start="{" data-end="}">
<div class="line"><a id="l03005" name="l03005"></a><span class="lineno"><a class="line" href="namespaceripple.html#a83da4b11e236a23156ac525c94494dcf"> 3005</a></span><a class="code hl_function" href="namespaceripple.html#a83da4b11e236a23156ac525c94494dcf">rippleUnlockEscrowMPT</a>(</div>
<div class="line"><a id="l03006" name="l03006"></a><span class="lineno"> 3006</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>&amp; view,</div>
<div class="line"><a id="l03007" name="l03007"></a><span class="lineno"> 3007</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; sender,</div>
<div class="line"><a id="l03008" name="l03008"></a><span class="lineno"> 3008</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; receiver,</div>
<div class="line"><a id="l03009" name="l03009"></a><span class="lineno"> 3009</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="l03010" name="l03010"></a><span class="lineno"> 3010</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
<div class="line"><a id="l03011" name="l03011"></a><span class="lineno"> 3011</span>{</div>
<div class="line"><a id="l03012" name="l03012"></a><span class="lineno"> 3012</span> <span class="keyword">auto</span> <span class="keyword">const</span> issuer = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>();</div>
<div class="line"><a id="l03013" name="l03013"></a><span class="lineno"> 3013</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptIssue = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">get</a>&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;();</div>
<div class="line"><a id="l03014" name="l03014"></a><span class="lineno"> 3014</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptID = keylet::mptIssuance(mptIssue.getMptID());</div>
<div class="line"><a id="l03015" name="l03015"></a><span class="lineno"> 3015</span> <span class="keyword">auto</span> sleIssuance = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptID);</div>
<div class="line"><a id="l03016" name="l03016"></a><span class="lineno"> 3016</span> <span class="keywordflow">if</span> (!sleIssuance)</div>
<div class="line"><a id="l03017" name="l03017"></a><span class="lineno"> 3017</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03018" name="l03018"></a><span class="lineno"> 3018</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: MPT issuance not found for &quot;</span></div>
<div class="line"><a id="l03019" name="l03019"></a><span class="lineno"> 3019</span> &lt;&lt; mptIssue.getMptID();</div>
<div class="line"><a id="l03020" name="l03020"></a><span class="lineno"> 3020</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>;</div>
<div class="line"><a id="l03021" name="l03021"></a><span class="lineno"> 3021</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03022" name="l03022"></a><span class="lineno"> 3022</span> </div>
<div class="line"><a id="l03023" name="l03023"></a><span class="lineno"> 3023</span> (*sle)[sfMPTAmount] += delta;</div>
<div class="line"><a id="l03024" name="l03024"></a><span class="lineno"> 3024</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sle);</div>
<div class="line"><a id="l03025" name="l03025"></a><span class="lineno"> 3025</span> }</div>
<div class="line"><a id="l03026" name="l03026"></a><span class="lineno"> 3026</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03027" name="l03027"></a><span class="lineno"> 3027</span> {</div>
<div class="line"><a id="l03028" name="l03028"></a><span class="lineno"> 3028</span> <span class="comment">// Decrease the Issuance OutstandingAmount</span></div>
<div class="line"><a id="l03029" name="l03029"></a><span class="lineno"> 3029</span> <span class="keyword">auto</span> <span class="keyword">const</span> outstanding = sleIssuance-&gt;getFieldU64(sfOutstandingAmount);</div>
<div class="line"><a id="l03030" name="l03030"></a><span class="lineno"> 3030</span> <span class="keyword">auto</span> <span class="keyword">const</span> redeem = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l03031" name="l03031"></a><span class="lineno"> 3031</span> </div>
<div class="line"><a id="l03032" name="l03032"></a><span class="lineno"> 3032</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03033" name="l03033"></a><span class="lineno"> 3033</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(</div>
<div class="line"><a id="l03034" name="l03034"></a><span class="lineno"> 3034</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, outstanding), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, redeem)))</div>
<div class="line"><a id="l03035" name="l03035"></a><span class="lineno"> 3035</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03036" name="l03036"></a><span class="lineno"> 3036</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03037" name="l03037"></a><span class="lineno"> 3037</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient outstanding amount for &quot;</span></div>
<div class="line"><a id="l03038" name="l03038"></a><span class="lineno"> 3038</span> &lt;&lt; mptIssue.getMptID() &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; outstanding &lt;&lt; <span class="stringliteral">&quot; &lt; &quot;</span></div>
<div class="line"><a id="l03039" name="l03039"></a><span class="lineno"> 3039</span> &lt;&lt; redeem;</div>
<div class="line"><a id="l03040" name="l03040"></a><span class="lineno"> 3040</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03041" name="l03041"></a><span class="lineno"> 3041</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03042" name="l03042"></a><span class="lineno"> 3042</span> </div>
<div class="line"><a id="l03043" name="l03043"></a><span class="lineno"> 3043</span> sleIssuance-&gt;setFieldU64(sfOutstandingAmount, outstanding - redeem);</div>
<div class="line"><a id="l03044" name="l03044"></a><span class="lineno"> 3044</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l03045" name="l03045"></a><span class="lineno"> 3045</span> }</div>
<div class="line"><a id="l03046" name="l03046"></a><span class="lineno"> 3046</span> </div>
<div class="line"><a id="l03047" name="l03047"></a><span class="lineno"> 3047</span> <span class="keywordflow">if</span> (issuer == sender)</div>
<div class="line"><a id="l03048" name="l03048"></a><span class="lineno"> 3048</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03049" name="l03049"></a><span class="lineno"> 3049</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: sender is the issuer, &quot;</span></div>
<div class="line"><a id="l03050" name="l03050"></a><span class="lineno"> 3050</span> <span class="stringliteral">&quot;cannot unlock MPTs.&quot;</span>;</div>
<div class="line"><a id="l03051" name="l03051"></a><span class="lineno"> 3051</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03052" name="l03052"></a><span class="lineno"> 3052</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03053" name="l03053"></a><span class="lineno"> 3053</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03054" name="l03054"></a><span class="lineno"> 3054</span> {</div>
<div class="line"><a id="l03055" name="l03055"></a><span class="lineno"> 3055</span> <span class="comment">// Decrease the MPT Holder EscrowedAmount</span></div>
<div class="line"><a id="l03056" name="l03056"></a><span class="lineno"> 3056</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptokenID = keylet::mptoken(mptID.key, sender);</div>
<div class="line"><a id="l03057" name="l03057"></a><span class="lineno"> 3057</span> <span class="keyword">auto</span> sle = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptokenID);</div>
<div class="line"><a id="l03058" name="l03058"></a><span class="lineno"> 3058</span> <span class="keywordflow">if</span> (!sle)</div>
<div class="line"><a id="l03059" name="l03059"></a><span class="lineno"> 3059</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03060" name="l03060"></a><span class="lineno"> 3060</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03061" name="l03061"></a><span class="lineno"> 3061</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: MPToken not found for &quot;</span> &lt;&lt; sender;</div>
<div class="line"><a id="l03062" name="l03062"></a><span class="lineno"> 3062</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>;</div>
<div class="line"><a id="l03063" name="l03063"></a><span class="lineno"> 3063</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03064" name="l03064"></a><span class="lineno"> 3064</span> </div>
<div class="line"><a id="l03065" name="l03065"></a><span class="lineno"> 3065</span> <span class="keywordflow">if</span> (!sle-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l03066" name="l03066"></a><span class="lineno"> 3066</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03067" name="l03067"></a><span class="lineno"> 3067</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03068" name="l03068"></a><span class="lineno"> 3068</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: no locked amount in MPToken for &quot;</span></div>
<div class="line"><a id="l03069" name="l03069"></a><span class="lineno"> 3069</span> &lt;&lt; to_string(sender);</div>
<div class="line"><a id="l03070" name="l03070"></a><span class="lineno"> 3070</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03071" name="l03071"></a><span class="lineno"> 3071</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03072" name="l03072"></a><span class="lineno"> 3072</span> </div>
<div class="line"><a id="l03073" name="l03073"></a><span class="lineno"> 3073</span> <span class="keyword">auto</span> <span class="keyword">const</span> locked = sle-&gt;getFieldU64(sfLockedAmount);</div>
<div class="line"><a id="l03074" name="l03074"></a><span class="lineno"> 3074</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l03075" name="l03075"></a><span class="lineno"> 3075</span> </div>
<div class="line"><a id="l03076" name="l03076"></a><span class="lineno"> 3076</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03077" name="l03077"></a><span class="lineno"> 3077</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, locked), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, delta)))</div>
<div class="line"><a id="l03078" name="l03078"></a><span class="lineno"> 3078</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03079" name="l03079"></a><span class="lineno"> 3079</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03080" name="l03080"></a><span class="lineno"> 3080</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient locked amount for &quot;</span></div>
<div class="line"><a id="l03081" name="l03081"></a><span class="lineno"> 3081</span> &lt;&lt; to_string(sender) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; locked &lt;&lt; <span class="stringliteral">&quot; &lt; &quot;</span> &lt;&lt; delta;</div>
<div class="line"><a id="l03082" name="l03082"></a><span class="lineno"> 3082</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03083" name="l03083"></a><span class="lineno"> 3083</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03084" name="l03084"></a><span class="lineno"> 3084</span> </div>
<div class="line"><a id="l03085" name="l03085"></a><span class="lineno"> 3085</span> <span class="keyword">auto</span> <span class="keyword">const</span> newLocked = locked - delta;</div>
<div class="line"><a id="l03086" name="l03086"></a><span class="lineno"> 3086</span> <span class="keywordflow">if</span> (newLocked == 0)</div>
<div class="line"><a id="l03087" name="l03087"></a><span class="lineno"> 3087</span> sle-&gt;makeFieldAbsent(sfLockedAmount);</div>
<div class="line"><a id="l03088" name="l03088"></a><span class="lineno"> 3088</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03089" name="l03089"></a><span class="lineno"> 3089</span> sle-&gt;setFieldU64(sfLockedAmount, newLocked);</div>
<div class="line"><a id="l03090" name="l03090"></a><span class="lineno"> 3090</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sle);</div>
<div class="line"><a id="l03091" name="l03091"></a><span class="lineno"> 3091</span> }</div>
<div class="line"><a id="l03092" name="l03092"></a><span class="lineno"> 3092</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l03093" name="l03093"></a><span class="lineno"> 3093</span>}</div>
<div class="line"><a id="l03023" name="l03023"></a><span class="lineno"> 3023</span> <span class="comment">// Decrease the Issuance EscrowedAmount</span></div>
<div class="line"><a id="l03024" name="l03024"></a><span class="lineno"> 3024</span> {</div>
<div class="line"><a id="l03025" name="l03025"></a><span class="lineno"> 3025</span> <span class="keywordflow">if</span> (!sleIssuance-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l03026" name="l03026"></a><span class="lineno"> 3026</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03027" name="l03027"></a><span class="lineno"> 3027</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03028" name="l03028"></a><span class="lineno"> 3028</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: no locked amount in issuance for &quot;</span></div>
<div class="line"><a id="l03029" name="l03029"></a><span class="lineno"> 3029</span> &lt;&lt; mptIssue.getMptID();</div>
<div class="line"><a id="l03030" name="l03030"></a><span class="lineno"> 3030</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03031" name="l03031"></a><span class="lineno"> 3031</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03032" name="l03032"></a><span class="lineno"> 3032</span> </div>
<div class="line"><a id="l03033" name="l03033"></a><span class="lineno"> 3033</span> <span class="keyword">auto</span> <span class="keyword">const</span> locked = sleIssuance-&gt;getFieldU64(sfLockedAmount);</div>
<div class="line"><a id="l03034" name="l03034"></a><span class="lineno"> 3034</span> <span class="keyword">auto</span> <span class="keyword">const</span> redeem = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l03035" name="l03035"></a><span class="lineno"> 3035</span> </div>
<div class="line"><a id="l03036" name="l03036"></a><span class="lineno"> 3036</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03037" name="l03037"></a><span class="lineno"> 3037</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(</div>
<div class="line"><a id="l03038" name="l03038"></a><span class="lineno"> 3038</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, locked), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, redeem)))</div>
<div class="line"><a id="l03039" name="l03039"></a><span class="lineno"> 3039</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03040" name="l03040"></a><span class="lineno"> 3040</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03041" name="l03041"></a><span class="lineno"> 3041</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient locked amount for &quot;</span></div>
<div class="line"><a id="l03042" name="l03042"></a><span class="lineno"> 3042</span> &lt;&lt; mptIssue.getMptID() &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; locked &lt;&lt; <span class="stringliteral">&quot; &lt; &quot;</span> &lt;&lt; redeem;</div>
<div class="line"><a id="l03043" name="l03043"></a><span class="lineno"> 3043</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03044" name="l03044"></a><span class="lineno"> 3044</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03045" name="l03045"></a><span class="lineno"> 3045</span> </div>
<div class="line"><a id="l03046" name="l03046"></a><span class="lineno"> 3046</span> <span class="keyword">auto</span> <span class="keyword">const</span> newLocked = locked - redeem;</div>
<div class="line"><a id="l03047" name="l03047"></a><span class="lineno"> 3047</span> <span class="keywordflow">if</span> (newLocked == 0)</div>
<div class="line"><a id="l03048" name="l03048"></a><span class="lineno"> 3048</span> sleIssuance-&gt;makeFieldAbsent(sfLockedAmount);</div>
<div class="line"><a id="l03049" name="l03049"></a><span class="lineno"> 3049</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03050" name="l03050"></a><span class="lineno"> 3050</span> sleIssuance-&gt;setFieldU64(sfLockedAmount, newLocked);</div>
<div class="line"><a id="l03051" name="l03051"></a><span class="lineno"> 3051</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l03052" name="l03052"></a><span class="lineno"> 3052</span> }</div>
<div class="line"><a id="l03053" name="l03053"></a><span class="lineno"> 3053</span> </div>
<div class="line"><a id="l03054" name="l03054"></a><span class="lineno"> 3054</span> <span class="keywordflow">if</span> (issuer != receiver)</div>
<div class="line"><a id="l03055" name="l03055"></a><span class="lineno"> 3055</span> {</div>
<div class="line"><a id="l03056" name="l03056"></a><span class="lineno"> 3056</span> <span class="comment">// Increase the MPT Holder MPTAmount</span></div>
<div class="line"><a id="l03057" name="l03057"></a><span class="lineno"> 3057</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptokenID = keylet::mptoken(mptID.key, receiver);</div>
<div class="line"><a id="l03058" name="l03058"></a><span class="lineno"> 3058</span> <span class="keyword">auto</span> sle = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptokenID);</div>
<div class="line"><a id="l03059" name="l03059"></a><span class="lineno"> 3059</span> <span class="keywordflow">if</span> (!sle)</div>
<div class="line"><a id="l03060" name="l03060"></a><span class="lineno"> 3060</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03061" name="l03061"></a><span class="lineno"> 3061</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03062" name="l03062"></a><span class="lineno"> 3062</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: MPToken not found for &quot;</span> &lt;&lt; receiver;</div>
<div class="line"><a id="l03063" name="l03063"></a><span class="lineno"> 3063</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l03064" name="l03064"></a><span class="lineno"> 3064</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03065" name="l03065"></a><span class="lineno"> 3065</span> </div>
<div class="line"><a id="l03066" name="l03066"></a><span class="lineno"> 3066</span> <span class="keyword">auto</span> <a class="code hl_enumvalue" href="namespaceripple.html#a6434c1a0fd22b77e2e4a228c0eca79eba43b5c9175984c071f30b873fdce0a000">current</a> = sle-&gt;getFieldU64(sfMPTAmount);</div>
<div class="line"><a id="l03067" name="l03067"></a><span class="lineno"> 3067</span> <span class="keyword">auto</span> delta = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l03068" name="l03068"></a><span class="lineno"> 3068</span> </div>
<div class="line"><a id="l03069" name="l03069"></a><span class="lineno"> 3069</span> <span class="comment">// Overflow check for addition</span></div>
<div class="line"><a id="l03070" name="l03070"></a><span class="lineno"> 3070</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe">canAdd</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, <a class="code hl_enumvalue" href="namespaceripple.html#a6434c1a0fd22b77e2e4a228c0eca79eba43b5c9175984c071f30b873fdce0a000">current</a>), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, delta)))</div>
<div class="line"><a id="l03071" name="l03071"></a><span class="lineno"> 3071</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03072" name="l03072"></a><span class="lineno"> 3072</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03073" name="l03073"></a><span class="lineno"> 3073</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: overflow on MPTAmount for &quot;</span></div>
<div class="line"><a id="l03074" name="l03074"></a><span class="lineno"> 3074</span> &lt;&lt; to_string(receiver) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; <a class="code hl_enumvalue" href="namespaceripple.html#a6434c1a0fd22b77e2e4a228c0eca79eba43b5c9175984c071f30b873fdce0a000">current</a> &lt;&lt; <span class="stringliteral">&quot; + &quot;</span> &lt;&lt; delta;</div>
<div class="line"><a id="l03075" name="l03075"></a><span class="lineno"> 3075</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03076" name="l03076"></a><span class="lineno"> 3076</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03077" name="l03077"></a><span class="lineno"> 3077</span> </div>
<div class="line"><a id="l03078" name="l03078"></a><span class="lineno"> 3078</span> (*sle)[sfMPTAmount] += delta;</div>
<div class="line"><a id="l03079" name="l03079"></a><span class="lineno"> 3079</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sle);</div>
<div class="line"><a id="l03080" name="l03080"></a><span class="lineno"> 3080</span> }</div>
<div class="line"><a id="l03081" name="l03081"></a><span class="lineno"> 3081</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03082" name="l03082"></a><span class="lineno"> 3082</span> {</div>
<div class="line"><a id="l03083" name="l03083"></a><span class="lineno"> 3083</span> <span class="comment">// Decrease the Issuance OutstandingAmount</span></div>
<div class="line"><a id="l03084" name="l03084"></a><span class="lineno"> 3084</span> <span class="keyword">auto</span> <span class="keyword">const</span> outstanding = sleIssuance-&gt;getFieldU64(sfOutstandingAmount);</div>
<div class="line"><a id="l03085" name="l03085"></a><span class="lineno"> 3085</span> <span class="keyword">auto</span> <span class="keyword">const</span> redeem = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l03086" name="l03086"></a><span class="lineno"> 3086</span> </div>
<div class="line"><a id="l03087" name="l03087"></a><span class="lineno"> 3087</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03088" name="l03088"></a><span class="lineno"> 3088</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(</div>
<div class="line"><a id="l03089" name="l03089"></a><span class="lineno"> 3089</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, outstanding), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, redeem)))</div>
<div class="line"><a id="l03090" name="l03090"></a><span class="lineno"> 3090</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03091" name="l03091"></a><span class="lineno"> 3091</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03092" name="l03092"></a><span class="lineno"> 3092</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient outstanding amount for &quot;</span></div>
<div class="line"><a id="l03093" name="l03093"></a><span class="lineno"> 3093</span> &lt;&lt; mptIssue.getMptID() &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; outstanding &lt;&lt; <span class="stringliteral">&quot; &lt; &quot;</span></div>
<div class="line"><a id="l03094" name="l03094"></a><span class="lineno"> 3094</span> &lt;&lt; redeem;</div>
<div class="line"><a id="l03095" name="l03095"></a><span class="lineno"> 3095</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03096" name="l03096"></a><span class="lineno"> 3096</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03097" name="l03097"></a><span class="lineno"> 3097</span> </div>
<div class="line"><a id="l03098" name="l03098"></a><span class="lineno"> 3098</span> sleIssuance-&gt;setFieldU64(sfOutstandingAmount, outstanding - redeem);</div>
<div class="line"><a id="l03099" name="l03099"></a><span class="lineno"> 3099</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l03100" name="l03100"></a><span class="lineno"> 3100</span> }</div>
<div class="line"><a id="l03101" name="l03101"></a><span class="lineno"> 3101</span> </div>
<div class="line"><a id="l03102" name="l03102"></a><span class="lineno"> 3102</span> <span class="keywordflow">if</span> (issuer == sender)</div>
<div class="line"><a id="l03103" name="l03103"></a><span class="lineno"> 3103</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03104" name="l03104"></a><span class="lineno"> 3104</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: sender is the issuer, &quot;</span></div>
<div class="line"><a id="l03105" name="l03105"></a><span class="lineno"> 3105</span> <span class="stringliteral">&quot;cannot unlock MPTs.&quot;</span>;</div>
<div class="line"><a id="l03106" name="l03106"></a><span class="lineno"> 3106</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03107" name="l03107"></a><span class="lineno"> 3107</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03108" name="l03108"></a><span class="lineno"> 3108</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03109" name="l03109"></a><span class="lineno"> 3109</span> {</div>
<div class="line"><a id="l03110" name="l03110"></a><span class="lineno"> 3110</span> <span class="comment">// Decrease the MPT Holder EscrowedAmount</span></div>
<div class="line"><a id="l03111" name="l03111"></a><span class="lineno"> 3111</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptokenID = keylet::mptoken(mptID.key, sender);</div>
<div class="line"><a id="l03112" name="l03112"></a><span class="lineno"> 3112</span> <span class="keyword">auto</span> sle = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(mptokenID);</div>
<div class="line"><a id="l03113" name="l03113"></a><span class="lineno"> 3113</span> <span class="keywordflow">if</span> (!sle)</div>
<div class="line"><a id="l03114" name="l03114"></a><span class="lineno"> 3114</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03115" name="l03115"></a><span class="lineno"> 3115</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03116" name="l03116"></a><span class="lineno"> 3116</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: MPToken not found for &quot;</span> &lt;&lt; sender;</div>
<div class="line"><a id="l03117" name="l03117"></a><span class="lineno"> 3117</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>;</div>
<div class="line"><a id="l03118" name="l03118"></a><span class="lineno"> 3118</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03119" name="l03119"></a><span class="lineno"> 3119</span> </div>
<div class="line"><a id="l03120" name="l03120"></a><span class="lineno"> 3120</span> <span class="keywordflow">if</span> (!sle-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l03121" name="l03121"></a><span class="lineno"> 3121</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03122" name="l03122"></a><span class="lineno"> 3122</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03123" name="l03123"></a><span class="lineno"> 3123</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: no locked amount in MPToken for &quot;</span></div>
<div class="line"><a id="l03124" name="l03124"></a><span class="lineno"> 3124</span> &lt;&lt; to_string(sender);</div>
<div class="line"><a id="l03125" name="l03125"></a><span class="lineno"> 3125</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03126" name="l03126"></a><span class="lineno"> 3126</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03127" name="l03127"></a><span class="lineno"> 3127</span> </div>
<div class="line"><a id="l03128" name="l03128"></a><span class="lineno"> 3128</span> <span class="keyword">auto</span> <span class="keyword">const</span> locked = sle-&gt;getFieldU64(sfLockedAmount);</div>
<div class="line"><a id="l03129" name="l03129"></a><span class="lineno"> 3129</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>();</div>
<div class="line"><a id="l03130" name="l03130"></a><span class="lineno"> 3130</span> </div>
<div class="line"><a id="l03131" name="l03131"></a><span class="lineno"> 3131</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03132" name="l03132"></a><span class="lineno"> 3132</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, locked), <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(mptIssue, delta)))</div>
<div class="line"><a id="l03133" name="l03133"></a><span class="lineno"> 3133</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03134" name="l03134"></a><span class="lineno"> 3134</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03135" name="l03135"></a><span class="lineno"> 3135</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient locked amount for &quot;</span></div>
<div class="line"><a id="l03136" name="l03136"></a><span class="lineno"> 3136</span> &lt;&lt; to_string(sender) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; locked &lt;&lt; <span class="stringliteral">&quot; &lt; &quot;</span> &lt;&lt; delta;</div>
<div class="line"><a id="l03137" name="l03137"></a><span class="lineno"> 3137</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03138" name="l03138"></a><span class="lineno"> 3138</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03139" name="l03139"></a><span class="lineno"> 3139</span> </div>
<div class="line"><a id="l03140" name="l03140"></a><span class="lineno"> 3140</span> <span class="keyword">auto</span> <span class="keyword">const</span> newLocked = locked - delta;</div>
<div class="line"><a id="l03141" name="l03141"></a><span class="lineno"> 3141</span> <span class="keywordflow">if</span> (newLocked == 0)</div>
<div class="line"><a id="l03142" name="l03142"></a><span class="lineno"> 3142</span> sle-&gt;makeFieldAbsent(sfLockedAmount);</div>
<div class="line"><a id="l03143" name="l03143"></a><span class="lineno"> 3143</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03144" name="l03144"></a><span class="lineno"> 3144</span> sle-&gt;setFieldU64(sfLockedAmount, newLocked);</div>
<div class="line"><a id="l03145" name="l03145"></a><span class="lineno"> 3145</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sle);</div>
<div class="line"><a id="l03146" name="l03146"></a><span class="lineno"> 3146</span> }</div>
<div class="line"><a id="l03147" name="l03147"></a><span class="lineno"> 3147</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l03148" name="l03148"></a><span class="lineno"> 3148</span>}</div>
</div>
<div class="line"><a id="l03094" name="l03094"></a><span class="lineno"> 3094</span> </div>
<div class="line"><a id="l03095" name="l03095"></a><span class="lineno"> 3095</span><span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen03096" data-start="{" data-end="}">
<div class="line"><a id="l03096" name="l03096"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3"> 3096</a></span><a class="code hl_function" href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3">after</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a> now, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> mark)</div>
<div class="line"><a id="l03097" name="l03097"></a><span class="lineno"> 3097</span>{</div>
<div class="line"><a id="l03098" name="l03098"></a><span class="lineno"> 3098</span> <span class="keywordflow">return</span> now.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch.html">time_since_epoch</a>().count() &gt; mark;</div>
<div class="line"><a id="l03099" name="l03099"></a><span class="lineno"> 3099</span>}</div>
<div class="line"><a id="l03149" name="l03149"></a><span class="lineno"> 3149</span> </div>
<div class="line"><a id="l03150" name="l03150"></a><span class="lineno"> 3150</span><span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen03151" data-start="{" data-end="}">
<div class="line"><a id="l03151" name="l03151"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3"> 3151</a></span><a class="code hl_function" href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3">after</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a> now, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> mark)</div>
<div class="line"><a id="l03152" name="l03152"></a><span class="lineno"> 3152</span>{</div>
<div class="line"><a id="l03153" name="l03153"></a><span class="lineno"> 3153</span> <span class="keywordflow">return</span> now.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch.html">time_since_epoch</a>().count() &gt; mark;</div>
<div class="line"><a id="l03154" name="l03154"></a><span class="lineno"> 3154</span>}</div>
</div>
<div class="line"><a id="l03100" name="l03100"></a><span class="lineno"> 3100</span> </div>
<div class="line"><a id="l03101" name="l03101"></a><span class="lineno"> 3101</span>} <span class="comment">// namespace ripple</span></div>
<div class="line"><a id="l03155" name="l03155"></a><span class="lineno"> 3155</span> </div>
<div class="line"><a id="l03156" name="l03156"></a><span class="lineno"> 3156</span>} <span class="comment">// namespace ripple</span></div>
<div class="ttc" id="aarray_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a></div></div>
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_1_1Stream_html"><div class="ttname"><a href="classbeast_1_1Journal_1_1Stream.html">beast::Journal::Stream</a></div><div class="ttdoc">Provide a light-weight way to check active() before string formatting.</div><div class="ttdef"><b>Definition</b> <a href="Journal_8h_source.html#l00204">Journal.h:205</a></div></div>
@@ -3364,6 +3421,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1NetClock_html_a4c2428e178dca6689fa3fb4be0657107"><div class="ttname"><a href="classripple_1_1NetClock.html#a4c2428e178dca6689fa3fb4be0657107">ripple::NetClock::time_point</a></div><div class="ttdeci">std::chrono::time_point&lt; NetClock &gt; time_point</div><div class="ttdef"><b>Definition</b> <a href="chrono_8h_source.html#l00069">chrono.h:69</a></div></div>
<div class="ttc" id="aclassripple_1_1NetClock_html_afe3767203cd971a00067671641bc7e16"><div class="ttname"><a href="classripple_1_1NetClock.html#afe3767203cd971a00067671641bc7e16">ripple::NetClock::duration</a></div><div class="ttdeci">std::chrono::duration&lt; rep, period &gt; duration</div><div class="ttdef"><b>Definition</b> <a href="chrono_8h_source.html#l00068">chrono.h:68</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html"><div class="ttname"><a href="classripple_1_1Number.html">ripple::Number</a></div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00035">Number.h:36</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a441d4a3d4e818af1c34478cefd219b16"><div class="ttname"><a href="classripple_1_1Number.html#a441d4a3d4e818af1c34478cefd219b16">ripple::Number::truncate</a></div><div class="ttdeci">Number truncate() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00154">Number.h:154</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html"><div class="ttname"><a href="classripple_1_1ReadView.html">ripple::ReadView</a></div><div class="ttdoc">A view into a ledger.</div><div class="ttdef"><b>Definition</b> <a href="ReadView_8h_source.html#l00051">ReadView.h:52</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_a0583a050ea7799ba331f6222a905f304"><div class="ttname"><a href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">ripple::ReadView::read</a></div><div class="ttdeci">virtual std::shared_ptr&lt; SLE const &gt; read(Keylet const &amp;k) const =0</div><div class="ttdoc">Return the state item associated with a key.</div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_a1427aa6cbbda99c50b9ca0ebf6e0d0b3"><div class="ttname"><a href="classripple_1_1ReadView.html#a1427aa6cbbda99c50b9ca0ebf6e0d0b3">ripple::ReadView::parentCloseTime</a></div><div class="ttdeci">NetClock::time_point parentCloseTime() const</div><div class="ttdoc">Returns the close time of the previous ledger.</div><div class="ttdef"><b>Definition</b> <a href="ReadView_8h_source.html#l00112">ReadView.h:112</a></div></div>
@@ -3379,16 +3437,19 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1SField_html"><div class="ttname"><a href="classripple_1_1SField.html">ripple::SField</a></div><div class="ttdoc">Identifies fields.</div><div class="ttdef"><b>Definition</b> <a href="SField_8h_source.html#l00142">SField.h:143</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_a003e773c6fd61536760b0efc262e9725"><div class="ttname"><a href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">ripple::STAmount::holds</a></div><div class="ttdeci">constexpr bool holds() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00465">STAmount.h:465</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_a2885d73708e1b809f31a46ffaea5ad7f"><div class="ttname"><a href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">ripple::STAmount::exponent</a></div><div class="ttdeci">int exponent() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00452">STAmount.h:452</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_a47d741e2043946647600882e7d8fe111"><div class="ttname"><a href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">ripple::STAmount::asset</a></div><div class="ttdeci">Asset const &amp; asset() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00483">STAmount.h:483</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_a4faedb8cf3aa230868cc0ecd3b0da6d6"><div class="ttname"><a href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">ripple::STAmount::get</a></div><div class="ttdeci">constexpr TIss const &amp; get() const</div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_a532cc28fd8b3d99c5de749e7e78fd08d"><div class="ttname"><a href="classripple_1_1STAmount.html#a532cc28fd8b3d99c5de749e7e78fd08d">ripple::STAmount::setIssuer</a></div><div class="ttdeci">void setIssuer(AccountID const &amp;uIssuer)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00588">STAmount.h:588</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_a5c7b5375e72e2459d4b6d65797744ca6"><div class="ttname"><a href="classripple_1_1STAmount.html#a5c7b5375e72e2459d4b6d65797744ca6">ripple::STAmount::getCurrency</a></div><div class="ttdeci">Currency const &amp; getCurrency() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00502">STAmount.h:502</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_a6c2ca92e9c91e2a34493d61e02d79ebf"><div class="ttname"><a href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">ripple::STAmount::xrp</a></div><div class="ttdeci">XRPAmount xrp() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00306">STAmount.cpp:306</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_aa830654962840253139aa891659f7551"><div class="ttname"><a href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">ripple::STAmount::negative</a></div><div class="ttdeci">bool negative() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00471">STAmount.h:471</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_aaac822e5948df5f12b6eaf48feaf1684"><div class="ttname"><a href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">ripple::STAmount::getIssuer</a></div><div class="ttdeci">AccountID const &amp; getIssuer() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00508">STAmount.h:508</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_ac22cc0520139c8d6bfa612d8ed3ef069"><div class="ttname"><a href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">ripple::STAmount::mpt</a></div><div class="ttdeci">MPTAmount mpt() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00337">STAmount.cpp:337</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>
<div class="ttc" id="aclassripple_1_1STAmount_html_ad9cebdb647da68f740009f9cda4dbe83"><div class="ttname"><a href="classripple_1_1STAmount.html#ad9cebdb647da68f740009f9cda4dbe83">ripple::STAmount::negate</a></div><div class="ttdeci">void negate()</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00564">STAmount.h:564</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_ae1e71aef94d7a8d5730eb85804b710da"><div class="ttname"><a href="classripple_1_1STAmount.html#ae1e71aef94d7a8d5730eb85804b710da">ripple::STAmount::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00571">STAmount.h:571</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_ae7f9ce5e872fd96b92b0cedbf8f09f81"><div class="ttname"><a href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">ripple::STAmount::mantissa</a></div><div class="ttdeci">std::uint64_t mantissa() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00477">STAmount.h:477</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_aee39db45aa65eddca7002ad9bf3e7877"><div class="ttname"><a href="classripple_1_1STAmount.html#aee39db45aa65eddca7002ad9bf3e7877">ripple::STAmount::getFullText</a></div><div class="ttdeci">std::string getFullText() const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00696">STAmount.cpp:696</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_af3a02d7e9cd0b11509a90e0e6980bd64"><div class="ttname"><a href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">ripple::STAmount::native</a></div><div class="ttdeci">bool native() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00458">STAmount.h:458</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_af8fda98bf85bb681409a8d601a3f08dc"><div class="ttname"><a href="classripple_1_1STAmount.html#af8fda98bf85bb681409a8d601a3f08dc">ripple::STAmount::zeroed</a></div><div class="ttdeci">STAmount zeroed() const</div><div class="ttdoc">Returns a zero value with the same issuer and currency.</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00520">STAmount.h:520</a></div></div>
@@ -3425,11 +3486,11 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="anamespaceripple_1_1keylet_html_acda2d89a44551845c5be38291e5c9e8b"><div class="ttname"><a href="namespaceripple_1_1keylet.html#acda2d89a44551845c5be38291e5c9e8b">ripple::keylet::skip</a></div><div class="ttdeci">Keylet const &amp; skip() noexcept</div><div class="ttdoc">The index of the &quot;short&quot; skip list.</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00196">Indexes.cpp:196</a></div></div>
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition</b> <a href="algorithm_8h_source.html#l00025">algorithm.h:25</a></div></div>
<div class="ttc" id="anamespaceripple_html_a00ae0d729cb3e35b6bcac9a27ebb5284"><div class="ttname"><a href="namespaceripple.html#a00ae0d729cb3e35b6bcac9a27ebb5284">ripple::AccountID</a></div><div class="ttdeci">base_uint&lt; 160, detail::AccountIDTag &gt; AccountID</div><div class="ttdoc">A 160-bit unsigned that uniquely identifies an account.</div><div class="ttdef"><b>Definition</b> <a href="AccountID_8h_source.html#l00048">AccountID.h:48</a></div></div>
<div class="ttc" id="anamespaceripple_html_a02de69480d9655456084663dc5d7c100"><div class="ttname"><a href="namespaceripple.html#a02de69480d9655456084663dc5d7c100">ripple::rippleLockEscrowMPT</a></div><div class="ttdeci">TER rippleLockEscrowMPT(ApplyView &amp;view, AccountID const &amp;sender, STAmount const &amp;amount, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02853">View.cpp:2853</a></div></div>
<div class="ttc" id="anamespaceripple_html_a02de69480d9655456084663dc5d7c100"><div class="ttname"><a href="namespaceripple.html#a02de69480d9655456084663dc5d7c100">ripple::rippleLockEscrowMPT</a></div><div class="ttdeci">TER rippleLockEscrowMPT(ApplyView &amp;view, AccountID const &amp;sender, STAmount const &amp;amount, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02908">View.cpp:2908</a></div></div>
<div class="ttc" id="anamespaceripple_html_a065cda95aed9cb1d66fb81cad0867ef6"><div class="ttname"><a href="namespaceripple.html#a065cda95aed9cb1d66fb81cad0867ef6">ripple::noAccount</a></div><div class="ttdeci">AccountID const &amp; noAccount()</div><div class="ttdoc">A placeholder for empty accounts.</div><div class="ttdef"><b>Definition</b> <a href="AccountID_8cpp_source.html#l00185">AccountID.cpp:185</a></div></div>
<div class="ttc" id="anamespaceripple_html_a09aa323550d2b54d5ae9c08da46b2b2d"><div class="ttname"><a href="namespaceripple.html#a09aa323550d2b54d5ae9c08da46b2b2d">ripple::createPseudoAccount</a></div><div class="ttdeci">Expected&lt; std::shared_ptr&lt; SLE &gt;, TER &gt; createPseudoAccount(ApplyView &amp;view, uint256 const &amp;pseudoOwnerKey, SField const &amp;ownerField)</div><div class="ttdoc">Create pseudo-account, storing pseudoOwnerKey into ownerField.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l01094">View.cpp:1094</a></div></div>
<div class="ttc" id="anamespaceripple_html_a0c65407eaf85620bf5f692dccc25808e"><div class="ttname"><a href="namespaceripple.html#a0c65407eaf85620bf5f692dccc25808e">ripple::updateTrustLine</a></div><div class="ttdeci">static bool updateTrustLine(ApplyView &amp;view, SLE::pointer state, bool bSenderHigh, AccountID const &amp;sender, STAmount const &amp;before, STAmount const &amp;after, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02135">View.cpp:2135</a></div></div>
<div class="ttc" id="anamespaceripple_html_a11cf1f5041dbfb1076ae5dded56ed5ec"><div class="ttname"><a href="namespaceripple.html#a11cf1f5041dbfb1076ae5dded56ed5ec">ripple::maxAssetCheckDepth</a></div><div class="ttdeci">std::uint8_t constexpr maxAssetCheckDepth</div><div class="ttdoc">Maximum recursion depth for vault shares being put as an asset inside another vault; counted from 0.</div><div class="ttdef"><b>Definition</b> <a href="Protocol_8h_source.html#l00127">Protocol.h:127</a></div></div>
<div class="ttc" id="anamespaceripple_html_a11cf1f5041dbfb1076ae5dded56ed5ec"><div class="ttname"><a href="namespaceripple.html#a11cf1f5041dbfb1076ae5dded56ed5ec">ripple::maxAssetCheckDepth</a></div><div class="ttdeci">std::uint8_t constexpr maxAssetCheckDepth</div><div class="ttdoc">Maximum recursion depth for vault shares being put as an asset inside another vault; counted from 0.</div><div class="ttdef"><b>Definition</b> <a href="Protocol_8h_source.html#l00134">Protocol.h:134</a></div></div>
<div class="ttc" id="anamespaceripple_html_a15bb971c7e554fc3df218aba54c33fcc"><div class="ttname"><a href="namespaceripple.html#a15bb971c7e554fc3df218aba54c33fcc">ripple::accountFunds</a></div><div class="ttdeci">STAmount accountFunds(ReadView const &amp;view, AccountID const &amp;id, STAmount const &amp;saDefault, FreezeHandling freezeHandling, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l00552">View.cpp:552</a></div></div>
<div class="ttc" id="anamespaceripple_html_a16b466cc38b73c15e032e268db4c4de7"><div class="ttname"><a href="namespaceripple.html#a16b466cc38b73c15e032e268db4c4de7">ripple::requireAuth</a></div><div class="ttdeci">TER requireAuth(ReadView const &amp;view, Issue const &amp;issue, AccountID const &amp;account, AuthType authType)</div><div class="ttdoc">Check if the account lacks required authorization.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02404">View.cpp:2404</a></div></div>
<div class="ttc" id="anamespaceripple_html_a17a9a9b903b66e49f5413d82ce79f085"><div class="ttname"><a href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085">ripple::FreezeHandling</a></div><div class="ttdeci">FreezeHandling</div><div class="ttdoc">Controls the treatment of frozen account balances.</div><div class="ttdef"><b>Definition</b> <a href="View_8h_source.html#l00078">View.h:78</a></div></div>
@@ -3437,8 +3498,8 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="anamespaceripple_html_a206bfc3d5fcad44ece8cab528ccf48ba"><div class="ttname"><a href="namespaceripple.html#a206bfc3d5fcad44ece8cab528ccf48ba">ripple::cdirFirst</a></div><div class="ttdeci">bool cdirFirst(ReadView const &amp;view, uint256 const &amp;root, std::shared_ptr&lt; SLE const &gt; &amp;page, unsigned int &amp;index, uint256 &amp;entry)</div><div class="ttdoc">Returns the first entry in the directory, advancing the index.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l00146">View.cpp:146</a></div></div>
<div class="ttc" id="anamespaceripple_html_a20d30277b9c78756b3d14493055a307c"><div class="ttname"><a href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">ripple::isXRP</a></div><div class="ttdeci">bool isXRP(AccountID const &amp;c)</div><div class="ttdef"><b>Definition</b> <a href="AccountID_8h_source.html#l00090">AccountID.h:90</a></div></div>
<div class="ttc" id="anamespaceripple_html_a21696ba0d0fac348f88f1b9da51091b0"><div class="ttname"><a href="namespaceripple.html#a21696ba0d0fac348f88f1b9da51091b0">ripple::xrpAccount</a></div><div class="ttdeci">AccountID const &amp; xrpAccount()</div><div class="ttdoc">Compute AccountID from public key.</div><div class="ttdef"><b>Definition</b> <a href="AccountID_8cpp_source.html#l00178">AccountID.cpp:178</a></div></div>
<div class="ttc" id="anamespaceripple_html_a2538e2190b6fa5b9b2f10e74f64c905c"><div class="ttname"><a href="namespaceripple.html#a2538e2190b6fa5b9b2f10e74f64c905c">ripple::sharesToAssetsWithdraw</a></div><div class="ttdeci">STAmount sharesToAssetsWithdraw(std::shared_ptr&lt; SLE const &gt; const &amp;vault, std::shared_ptr&lt; SLE const &gt; const &amp;issuance, STAmount const &amp;shares)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02834">View.cpp:2834</a></div></div>
<div class="ttc" id="anamespaceripple_html_a260d2970ac1119109937ed1c5d4ca962a453d7db3d36a5516e925c466d1dc0ac1"><div class="ttname"><a href="namespaceripple.html#a260d2970ac1119109937ed1c5d4ca962a453d7db3d36a5516e925c466d1dc0ac1">ripple::telFAILED_PROCESSING</a></div><div class="ttdeci">@ telFAILED_PROCESSING</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00056">TER.h:56</a></div></div>
<div class="ttc" id="anamespaceripple_html_a27f27d96c4c3cfa4165d71c4b2266a46"><div class="ttname"><a href="namespaceripple.html#a27f27d96c4c3cfa4165d71c4b2266a46">ripple::sharesToAssetsDeposit</a></div><div class="ttdeci">std::optional&lt; STAmount &gt; sharesToAssetsDeposit(std::shared_ptr&lt; SLE const &gt; const &amp;vault, std::shared_ptr&lt; SLE const &gt; const &amp;issuance, STAmount const &amp;shares)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02825">View.cpp:2825</a></div></div>
<div class="ttc" id="anamespaceripple_html_a29c200b51e582524768ea6a9f3d9b279"><div class="ttname"><a href="namespaceripple.html#a29c200b51e582524768ea6a9f3d9b279">ripple::isIndividualFrozen</a></div><div class="ttdeci">bool isIndividualFrozen(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#l00214">View.cpp:214</a></div></div>
<div class="ttc" id="anamespaceripple_html_a2da08ee715495ec871618786c8afec80"><div class="ttname"><a href="namespaceripple.html#a2da08ee715495ec871618786c8afec80">ripple::deleteAMMTrustLine</a></div><div class="ttdeci">TER deleteAMMTrustLine(ApplyView &amp;view, std::shared_ptr&lt; SLE &gt; sleState, std::optional&lt; AccountID &gt; const &amp;ammAccountID, beast::Journal j)</div><div class="ttdoc">Delete trustline to AMM.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02720">View.cpp:2720</a></div></div>
<div class="ttc" id="anamespaceripple_html_a2f2f22330db2c109956e5c4e6be0249c"><div class="ttname"><a href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">ripple::canSubtract</a></div><div class="ttdeci">bool canSubtract(STAmount const &amp;amt1, STAmount const &amp;amt2)</div><div class="ttdoc">Determines if it is safe to subtract one STAmount from another.</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00608">STAmount.cpp:608</a></div></div>
@@ -3473,6 +3534,8 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="anamespaceripple_html_a4a9c7b33fef9015d6406302ef80b63c5af37617abe9ad741cd823746961f1fb3a"><div class="ttname"><a href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5af37617abe9ad741cd823746961f1fb3a">ripple::lsfLowAuth</a></div><div class="ttdeci">@ lsfLowAuth</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00161">LedgerFormats.h:161</a></div></div>
<div class="ttc" id="anamespaceripple_html_a4e070aef85986336795216a3e5336f8d"><div class="ttname"><a href="namespaceripple.html#a4e070aef85986336795216a3e5336f8d">ripple::AuthType</a></div><div class="ttdeci">AuthType</div><div class="ttdef"><b>Definition</b> <a href="View_8h_source.html#l00770">View.h:770</a></div></div>
<div class="ttc" id="anamespaceripple_html_a4e070aef85986336795216a3e5336f8da7559328fba92acce7308a39180e16441"><div class="ttname"><a href="namespaceripple.html#a4e070aef85986336795216a3e5336f8da7559328fba92acce7308a39180e16441">ripple::AuthType::StrongAuth</a></div><div class="ttdeci">@ StrongAuth</div></div>
<div class="ttc" id="anamespaceripple_html_a5509de8022f2d9dddf3a87f524e3503b"><div class="ttname"><a href="namespaceripple.html#a5509de8022f2d9dddf3a87f524e3503b">ripple::assetsToSharesWithdraw</a></div><div class="ttdeci">std::optional&lt; STAmount &gt; assetsToSharesWithdraw(std::shared_ptr&lt; SLE const &gt; const &amp;vault, std::shared_ptr&lt; SLE const &gt; const &amp;issuance, STAmount const &amp;assets, TruncateShares truncate)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02854">View.cpp:2854</a></div></div>
<div class="ttc" id="anamespaceripple_html_a550c0c64a14f021fb311b1f2507e8ae4"><div class="ttname"><a href="namespaceripple.html#a550c0c64a14f021fb311b1f2507e8ae4">ripple::assetsToSharesDeposit</a></div><div class="ttdeci">std::optional&lt; STAmount &gt; assetsToSharesDeposit(std::shared_ptr&lt; SLE const &gt; const &amp;vault, std::shared_ptr&lt; SLE const &gt; const &amp;issuance, STAmount const &amp;assets)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02797">View.cpp:2797</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_a5b188f8f22827b2e24b506ef852ffd69"><div class="ttname"><a href="namespaceripple.html#a5b188f8f22827b2e24b506ef852ffd69">ripple::AuthHandling</a></div><div class="ttdeci">AuthHandling</div><div class="ttdoc">Controls the treatment of unauthorized MPT balances.</div><div class="ttdef"><b>Definition</b> <a href="View_8h_source.html#l00081">View.h:81</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5b188f8f22827b2e24b506ef852ffd69a820269896276aff7cc9a2359a5ab28ef"><div class="ttname"><a href="namespaceripple.html#a5b188f8f22827b2e24b506ef852ffd69a820269896276aff7cc9a2359a5ab28ef">ripple::ahZERO_IF_UNAUTHORIZED</a></div><div class="ttdeci">@ ahZERO_IF_UNAUTHORIZED</div><div class="ttdef"><b>Definition</b> <a href="View_8h_source.html#l00081">View.h:81</a></div></div>
@@ -3488,9 +3551,10 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="anamespaceripple_html_a70a62aa7e380540ed36762d3c02492f1"><div class="ttname"><a href="namespaceripple.html#a70a62aa7e380540ed36762d3c02492f1">ripple::canTransfer</a></div><div class="ttdeci">TER canTransfer(ReadView const &amp;view, MPTIssue const &amp;mptIssue, AccountID const &amp;from, AccountID const &amp;to)</div><div class="ttdoc">Check if the destination account is allowed to receive MPT.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02622">View.cpp:2622</a></div></div>
<div class="ttc" id="anamespaceripple_html_a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f"><div class="ttname"><a href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">ripple::tefBAD_LEDGER</a></div><div class="ttdeci">@ tefBAD_LEDGER</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00170">TER.h:170</a></div></div>
<div class="ttc" id="anamespaceripple_html_a75cb21d7f1df42f2fdc8efddb79b63f4ad035d214edc31c72362d7efbdaba234c"><div class="ttname"><a href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ad035d214edc31c72362d7efbdaba234c">ripple::tefINTERNAL</a></div><div class="ttdeci">@ tefINTERNAL</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00173">TER.h:173</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7db8820410ffa3288079a33bc00109ac"><div class="ttname"><a href="namespaceripple.html#a7db8820410ffa3288079a33bc00109ac">ripple::sharesToAssetsWithdraw</a></div><div class="ttdeci">std::optional&lt; STAmount &gt; sharesToAssetsWithdraw(std::shared_ptr&lt; SLE const &gt; const &amp;vault, std::shared_ptr&lt; SLE const &gt; const &amp;issuance, STAmount const &amp;shares)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02883">View.cpp:2883</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7e31af9d90dac8c9e4272bf597d83fb4"><div class="ttname"><a href="namespaceripple.html#a7e31af9d90dac8c9e4272bf597d83fb4">ripple::adjustOwnerCount</a></div><div class="ttdeci">void adjustOwnerCount(ApplyView &amp;view, std::shared_ptr&lt; SLE &gt; const &amp;sle, std::int32_t amount, beast::Journal j)</div><div class="ttdoc">Adjust the owner count up or down.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l01030">View.cpp:1030</a></div></div>
<div class="ttc" id="anamespaceripple_html_a815da37e59b05570030f09cc6fae1914"><div class="ttname"><a href="namespaceripple.html#a815da37e59b05570030f09cc6fae1914">ripple::authorizeMPToken</a></div><div class="ttdeci">TER authorizeMPToken(ApplyView &amp;view, XRPAmount const &amp;priorBalance, MPTID const &amp;mptIssuanceID, AccountID const &amp;account, beast::Journal journal, std::uint32_t flags, std::optional&lt; AccountID &gt; holderID)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l01221">View.cpp:1221</a></div></div>
<div class="ttc" id="anamespaceripple_html_a83da4b11e236a23156ac525c94494dcf"><div class="ttname"><a href="namespaceripple.html#a83da4b11e236a23156ac525c94494dcf">ripple::rippleUnlockEscrowMPT</a></div><div class="ttdeci">TER rippleUnlockEscrowMPT(ApplyView &amp;view, AccountID const &amp;sender, AccountID const &amp;receiver, STAmount const &amp;amount, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02950">View.cpp:2950</a></div></div>
<div class="ttc" id="anamespaceripple_html_a83da4b11e236a23156ac525c94494dcf"><div class="ttname"><a href="namespaceripple.html#a83da4b11e236a23156ac525c94494dcf">ripple::rippleUnlockEscrowMPT</a></div><div class="ttdeci">TER rippleUnlockEscrowMPT(ApplyView &amp;view, AccountID const &amp;sender, AccountID const &amp;receiver, STAmount const &amp;amount, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l03005">View.cpp:3005</a></div></div>
<div class="ttc" id="anamespaceripple_html_a84319cd2dd4f62caf421081c2258889a"><div class="ttname"><a href="namespaceripple.html#a84319cd2dd4f62caf421081c2258889a">ripple::confineOwnerCount</a></div><div class="ttdeci">static std::uint32_t confineOwnerCount(std::uint32_t current, std::int32_t adjustment, std::optional&lt; AccountID &gt; const &amp;id=std::nullopt, beast::Journal j=beast::Journal{beast::Journal::getNullSink()})</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l00578">View.cpp:578</a></div></div>
<div class="ttc" id="anamespaceripple_html_a852ced93804c9ac7625fd2181db028f4"><div class="ttname"><a href="namespaceripple.html#a852ced93804c9ac7625fd2181db028f4">ripple::rippleCreditIOU</a></div><div class="ttdeci">static TER rippleCreditIOU(ApplyView &amp;view, AccountID const &amp;uSenderID, AccountID const &amp;uReceiverID, STAmount const &amp;saAmount, bool bCheckIssuer, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l01635">View.cpp:1635</a></div></div>
<div class="ttc" id="anamespaceripple_html_a868a93d3fbb97e3ba20ba054df1db3ca"><div class="ttname"><a href="namespaceripple.html#a868a93d3fbb97e3ba20ba054df1db3ca">ripple::adjustOwnerCount</a></div><div class="ttdeci">static bool adjustOwnerCount(ApplyContext &amp;ctx, int count)</div><div class="ttdef"><b>Definition</b> <a href="SetOracle_8cpp_source.html#l00186">SetOracle.cpp:186</a></div></div>
@@ -3529,13 +3593,12 @@ $(document).ready(function() { init_codefold(0); });
<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_ac151bf19e1f4daae2b04c65c65117139"><div class="ttname"><a href="namespaceripple.html#ac151bf19e1f4daae2b04c65c65117139">ripple::LedgerEntryType</a></div><div class="ttdeci">LedgerEntryType</div><div class="ttdoc">Identifiers for on-ledger objects.</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00053">LedgerFormats.h:54</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac1d430838f9c822e6c0722f54807ebef"><div class="ttname"><a href="namespaceripple.html#ac1d430838f9c822e6c0722f54807ebef">ripple::forEachItemAfter</a></div><div class="ttdeci">bool forEachItemAfter(ReadView const &amp;view, Keylet const &amp;root, uint256 const &amp;after, std::uint64_t const hint, unsigned int limit, std::function&lt; bool(std::shared_ptr&lt; SLE const &gt; const &amp;)&gt; const &amp;f)</div><div class="ttdoc">Iterate all items after an item in the given directory.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l00682">View.cpp:682</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac3e90afb749bb1f01e06729c7c860ba3"><div class="ttname"><a href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3">ripple::after</a></div><div class="ttdeci">bool after(NetClock::time_point now, std::uint32_t mark)</div><div class="ttdoc">Has the specified time passed?</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l03096">View.cpp:3096</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac527f4be8f38f42794ec9a8981c71f25"><div class="ttname"><a href="namespaceripple.html#ac527f4be8f38f42794ec9a8981c71f25">ripple::assetsToSharesWithdraw</a></div><div class="ttdeci">STAmount assetsToSharesWithdraw(std::shared_ptr&lt; SLE const &gt; const &amp;vault, std::shared_ptr&lt; SLE const &gt; const &amp;issuance, STAmount const &amp;assets)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02815">View.cpp:2815</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac3e90afb749bb1f01e06729c7c860ba3"><div class="ttname"><a href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3">ripple::after</a></div><div class="ttdeci">bool after(NetClock::time_point now, std::uint32_t mark)</div><div class="ttdoc">Has the specified time passed?</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l03151">View.cpp:3151</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac52c3ab9078d3e039b86c985d50be183"><div class="ttname"><a href="namespaceripple.html#ac52c3ab9078d3e039b86c985d50be183">ripple::TruncateShares</a></div><div class="ttdeci">TruncateShares</div><div class="ttdef"><b>Definition</b> <a href="View_8h_source.html#l00933">View.h:933</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac63838a9be23c18086f1f05c78867399"><div class="ttname"><a href="namespaceripple.html#ac63838a9be23c18086f1f05c78867399">ripple::cleanupOnAccountDelete</a></div><div class="ttdeci">TER cleanupOnAccountDelete(ApplyView &amp;view, Keylet const &amp;ownerDirKeylet, EntryDeleter const &amp;deleter, beast::Journal j, std::optional&lt; uint16_t &gt; maxNodesToDelete)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02642">View.cpp:2642</a></div></div>
<div class="ttc" id="anamespaceripple_html_accc8ce88b24f653a30e40f7d22e428c5"><div class="ttname"><a href="namespaceripple.html#accc8ce88b24f653a30e40f7d22e428c5">ripple::forEachItem</a></div><div class="ttdeci">void forEachItem(ReadView const &amp;view, Keylet const &amp;root, std::function&lt; void(std::shared_ptr&lt; SLE const &gt; const &amp;)&gt; const &amp;f)</div><div class="ttdoc">Iterate all items in the given directory.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l00654">View.cpp:654</a></div></div>
<div class="ttc" id="anamespaceripple_html_acdc87ea9c4ad1742d4aeebac963e8570"><div class="ttname"><a href="namespaceripple.html#acdc87ea9c4ad1742d4aeebac963e8570">ripple::root</a></div><div class="ttdeci">Number root(Number f, unsigned d)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00636">Number.cpp:636</a></div></div>
<div class="ttc" id="anamespaceripple_html_ace07ad1d6a80473343ca26e55942008c"><div class="ttname"><a href="namespaceripple.html#ace07ad1d6a80473343ca26e55942008c">ripple::verifyValidDomain</a></div><div class="ttdeci">TER verifyValidDomain(ApplyView &amp;view, AccountID const &amp;account, uint256 domainID, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="CredentialHelpers_8cpp_source.html#l00320">CredentialHelpers.cpp:320</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad4f860310e3dfc97345c3b673f7cd5d7"><div class="ttname"><a href="namespaceripple.html#ad4f860310e3dfc97345c3b673f7cd5d7">ripple::assetsToSharesDeposit</a></div><div class="ttdeci">STAmount assetsToSharesDeposit(std::shared_ptr&lt; SLE const &gt; const &amp;vault, std::shared_ptr&lt; SLE const &gt; const &amp;issuance, STAmount const &amp;assets)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02797">View.cpp:2797</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad574e2b04fc8231900df14881418af18"><div class="ttname"><a href="namespaceripple.html#ad574e2b04fc8231900df14881418af18">ripple::hasExpired</a></div><div class="ttdeci">bool hasExpired(ReadView const &amp;view, std::optional&lt; std::uint32_t &gt; const &amp;exp)</div><div class="ttdoc">Determines whether the given expiration time has passed.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l00174">View.cpp:174</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad9c8cd6337807aee48aba8ba202e5c5c"><div class="ttname"><a href="namespaceripple.html#ad9c8cd6337807aee48aba8ba202e5c5c">ripple::rippleSendIOU</a></div><div class="ttdeci">static TER rippleSendIOU(ApplyView &amp;view, AccountID const &amp;uSenderID, AccountID const &amp;uReceiverID, STAmount const &amp;saAmount, STAmount &amp;saActual, beast::Journal j, WaiveTransferFee waiveFee)</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l01789">View.cpp:1789</a></div></div>
<div class="ttc" id="anamespaceripple_html_adbbbf76f04d55cd69f1740ed38330719"><div class="ttname"><a href="namespaceripple.html#adbbbf76f04d55cd69f1740ed38330719">ripple::rippleCredit</a></div><div class="ttdeci">TER rippleCredit(ApplyView &amp;view, AccountID const &amp;uSenderID, AccountID const &amp;uReceiverID, STAmount const &amp;saAmount, bool bCheckIssuer, beast::Journal j)</div><div class="ttdoc">Calls static rippleCreditIOU if saAmount represents Issue.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02769">View.cpp:2769</a></div></div>