This commit is contained in:
Bronek
2025-09-15 07:51:47 -07:00
parent 751482d4dc
commit 2faaa01d8e
30 changed files with 1265 additions and 1157 deletions

View File

@@ -3234,161 +3234,189 @@ $(document).ready(function() { init_codefold(0); });
<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="l03005" name="l03005"></a><span class="lineno"><a class="line" href="namespaceripple.html#a2bf72b4d8923d178f4cb5ed49cdc1e24"> 3005</a></span><a class="code hl_function" href="namespaceripple.html#a2bf72b4d8923d178f4cb5ed49cdc1e24">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> <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 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; netAmount,</div>
<div class="line"><a id="l03010" name="l03010"></a><span class="lineno"> 3010</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; grossAmount,</div>
<div class="line"><a id="l03011" name="l03011"></a><span class="lineno"> 3011</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
<div class="line"><a id="l03012" name="l03012"></a><span class="lineno"> 3012</span>{</div>
<div class="line"><a id="l03013" name="l03013"></a><span class="lineno"> 3013</span> <span class="keywordflow">if</span> (!view.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixTokenEscrowV1))</div>
<div class="line"><a id="l03014" name="l03014"></a><span class="lineno"> 3014</span> XRPL_ASSERT(</div>
<div class="line"><a id="l03015" name="l03015"></a><span class="lineno"> 3015</span> netAmount == grossAmount,</div>
<div class="line"><a id="l03016" name="l03016"></a><span class="lineno"> 3016</span> <span class="stringliteral">&quot;ripple::rippleUnlockEscrowMPT : netAmount == grossAmount&quot;</span>);</div>
<div class="line"><a id="l03017" name="l03017"></a><span class="lineno"> 3017</span> </div>
<div class="line"><a id="l03018" name="l03018"></a><span class="lineno"> 3018</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; issuer = netAmount.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>();</div>
<div class="line"><a id="l03019" name="l03019"></a><span class="lineno"> 3019</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; mptIssue = netAmount.<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="l03020" name="l03020"></a><span class="lineno"> 3020</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptID = keylet::mptIssuance(mptIssue.getMptID());</div>
<div class="line"><a id="l03021" name="l03021"></a><span class="lineno"> 3021</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="l03022" name="l03022"></a><span class="lineno"> 3022</span> <span class="keywordflow">if</span> (!sleIssuance)</div>
<div class="line"><a id="l03023" name="l03023"></a><span class="lineno"> 3023</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03024" name="l03024"></a><span class="lineno"> 3024</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="l03025" name="l03025"></a><span class="lineno"> 3025</span> &lt;&lt; mptIssue.getMptID();</div>
<div class="line"><a id="l03026" name="l03026"></a><span class="lineno"> 3026</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="l03027" name="l03027"></a><span class="lineno"> 3027</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03028" name="l03028"></a><span class="lineno"> 3028</span> </div>
<div class="line"><a id="l03029" name="l03029"></a><span class="lineno"> 3029</span> <span class="comment">// Decrease the Issuance EscrowedAmount</span></div>
<div class="line"><a id="l03030" name="l03030"></a><span class="lineno"> 3030</span> {</div>
<div class="line"><a id="l03031" name="l03031"></a><span class="lineno"> 3031</span> <span class="keywordflow">if</span> (!sleIssuance-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l03032" name="l03032"></a><span class="lineno"> 3032</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03033" name="l03033"></a><span class="lineno"> 3033</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03034" name="l03034"></a><span class="lineno"> 3034</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: no locked amount in issuance for &quot;</span></div>
<div class="line"><a id="l03035" name="l03035"></a><span class="lineno"> 3035</span> &lt;&lt; mptIssue.getMptID();</div>
<div class="line"><a id="l03036" name="l03036"></a><span class="lineno"> 3036</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03037" name="l03037"></a><span class="lineno"> 3037</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03038" name="l03038"></a><span class="lineno"> 3038</span> </div>
<div class="line"><a id="l03039" name="l03039"></a><span class="lineno"> 3039</span> <span class="keyword">auto</span> <span class="keyword">const</span> locked = sleIssuance-&gt;getFieldU64(sfLockedAmount);</div>
<div class="line"><a id="l03040" name="l03040"></a><span class="lineno"> 3040</span> <span class="keyword">auto</span> <span class="keyword">const</span> redeem = grossAmount.<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="l03041" name="l03041"></a><span class="lineno"> 3041</span> </div>
<div class="line"><a id="l03042" name="l03042"></a><span class="lineno"> 3042</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03043" name="l03043"></a><span class="lineno"> 3043</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(</div>
<div class="line"><a id="l03044" name="l03044"></a><span class="lineno"> 3044</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="l03045" name="l03045"></a><span class="lineno"> 3045</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03046" name="l03046"></a><span class="lineno"> 3046</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03047" name="l03047"></a><span class="lineno"> 3047</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient locked amount for &quot;</span></div>
<div class="line"><a id="l03048" name="l03048"></a><span class="lineno"> 3048</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="l03049" name="l03049"></a><span class="lineno"> 3049</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03050" name="l03050"></a><span class="lineno"> 3050</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03051" name="l03051"></a><span class="lineno"> 3051</span> </div>
<div class="line"><a id="l03052" name="l03052"></a><span class="lineno"> 3052</span> <span class="keyword">auto</span> <span class="keyword">const</span> newLocked = locked - redeem;</div>
<div class="line"><a id="l03053" name="l03053"></a><span class="lineno"> 3053</span> <span class="keywordflow">if</span> (newLocked == 0)</div>
<div class="line"><a id="l03054" name="l03054"></a><span class="lineno"> 3054</span> sleIssuance-&gt;makeFieldAbsent(sfLockedAmount);</div>
<div class="line"><a id="l03055" name="l03055"></a><span class="lineno"> 3055</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03056" name="l03056"></a><span class="lineno"> 3056</span> sleIssuance-&gt;setFieldU64(sfLockedAmount, newLocked);</div>
<div class="line"><a id="l03057" name="l03057"></a><span class="lineno"> 3057</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l03058" name="l03058"></a><span class="lineno"> 3058</span> }</div>
<div class="line"><a id="l03059" name="l03059"></a><span class="lineno"> 3059</span> </div>
<div class="line"><a id="l03060" name="l03060"></a><span class="lineno"> 3060</span> <span class="keywordflow">if</span> (issuer != receiver)</div>
<div class="line"><a id="l03061" name="l03061"></a><span class="lineno"> 3061</span> {</div>
<div class="line"><a id="l03062" name="l03062"></a><span class="lineno"> 3062</span> <span class="comment">// Increase the MPT Holder MPTAmount</span></div>
<div class="line"><a id="l03063" name="l03063"></a><span class="lineno"> 3063</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptokenID = keylet::mptoken(mptID.key, receiver);</div>
<div class="line"><a id="l03064" name="l03064"></a><span class="lineno"> 3064</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="l03065" name="l03065"></a><span class="lineno"> 3065</span> <span class="keywordflow">if</span> (!sle)</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: MPToken not found for &quot;</span> &lt;&lt; receiver;</div>
<div class="line"><a id="l03069" name="l03069"></a><span class="lineno"> 3069</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="l03070" name="l03070"></a><span class="lineno"> 3070</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03071" name="l03071"></a><span class="lineno"> 3071</span> </div>
<div class="line"><a id="l03072" name="l03072"></a><span class="lineno"> 3072</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="l03073" name="l03073"></a><span class="lineno"> 3073</span> <span class="keyword">auto</span> delta = netAmount.<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="l03074" name="l03074"></a><span class="lineno"> 3074</span> </div>
<div class="line"><a id="l03075" name="l03075"></a><span class="lineno"> 3075</span> <span class="comment">// Overflow check for addition</span></div>
<div class="line"><a id="l03076" name="l03076"></a><span class="lineno"> 3076</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="l03077" name="l03077"></a><span class="lineno"> 3077</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03078" name="l03078"></a><span class="lineno"> 3078</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03079" name="l03079"></a><span class="lineno"> 3079</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: overflow on MPTAmount for &quot;</span></div>
<div class="line"><a id="l03080" name="l03080"></a><span class="lineno"> 3080</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="l03081" name="l03081"></a><span class="lineno"> 3081</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03082" name="l03082"></a><span class="lineno"> 3082</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03083" name="l03083"></a><span class="lineno"> 3083</span> </div>
<div class="line"><a id="l03084" name="l03084"></a><span class="lineno"> 3084</span> (*sle)[sfMPTAmount] += delta;</div>
<div class="line"><a id="l03085" name="l03085"></a><span class="lineno"> 3085</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sle);</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="keywordflow">else</span></div>
<div class="line"><a id="l03088" name="l03088"></a><span class="lineno"> 3088</span> {</div>
<div class="line"><a id="l03089" name="l03089"></a><span class="lineno"> 3089</span> <span class="comment">// Decrease the Issuance OutstandingAmount</span></div>
<div class="line"><a id="l03090" name="l03090"></a><span class="lineno"> 3090</span> <span class="keyword">auto</span> <span class="keyword">const</span> outstanding = sleIssuance-&gt;getFieldU64(sfOutstandingAmount);</div>
<div class="line"><a id="l03091" name="l03091"></a><span class="lineno"> 3091</span> <span class="keyword">auto</span> <span class="keyword">const</span> redeem = netAmount.<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="l03092" name="l03092"></a><span class="lineno"> 3092</span> </div>
<div class="line"><a id="l03093" name="l03093"></a><span class="lineno"> 3093</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03094" name="l03094"></a><span class="lineno"> 3094</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(</div>
<div class="line"><a id="l03095" name="l03095"></a><span class="lineno"> 3095</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="l03096" name="l03096"></a><span class="lineno"> 3096</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03097" name="l03097"></a><span class="lineno"> 3097</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03098" name="l03098"></a><span class="lineno"> 3098</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient outstanding amount for &quot;</span></div>
<div class="line"><a id="l03099" name="l03099"></a><span class="lineno"> 3099</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="l03100" name="l03100"></a><span class="lineno"> 3100</span> &lt;&lt; redeem;</div>
<div class="line"><a id="l03101" name="l03101"></a><span class="lineno"> 3101</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03102" name="l03102"></a><span class="lineno"> 3102</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03103" name="l03103"></a><span class="lineno"> 3103</span> </div>
<div class="line"><a id="l03104" name="l03104"></a><span class="lineno"> 3104</span> sleIssuance-&gt;setFieldU64(sfOutstandingAmount, outstanding - redeem);</div>
<div class="line"><a id="l03105" name="l03105"></a><span class="lineno"> 3105</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l03106" name="l03106"></a><span class="lineno"> 3106</span> }</div>
<div class="line"><a id="l03107" name="l03107"></a><span class="lineno"> 3107</span> </div>
<div class="line"><a id="l03108" name="l03108"></a><span class="lineno"> 3108</span> <span class="keywordflow">if</span> (issuer == sender)</div>
<div class="line"><a id="l03109" name="l03109"></a><span class="lineno"> 3109</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03110" name="l03110"></a><span class="lineno"> 3110</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="l03111" name="l03111"></a><span class="lineno"> 3111</span> <span class="stringliteral">&quot;cannot unlock MPTs.&quot;</span>;</div>
<div class="line"><a id="l03112" name="l03112"></a><span class="lineno"> 3112</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03113" name="l03113"></a><span class="lineno"> 3113</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03114" name="l03114"></a><span class="lineno"> 3114</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03115" name="l03115"></a><span class="lineno"> 3115</span> {</div>
<div class="line"><a id="l03116" name="l03116"></a><span class="lineno"> 3116</span> <span class="comment">// Decrease the MPT Holder EscrowedAmount</span></div>
<div class="line"><a id="l03117" name="l03117"></a><span class="lineno"> 3117</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptokenID = keylet::mptoken(mptID.key, sender);</div>
<div class="line"><a id="l03118" name="l03118"></a><span class="lineno"> 3118</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="l03119" name="l03119"></a><span class="lineno"> 3119</span> <span class="keywordflow">if</span> (!sle)</div>
<div class="line"><a id="l03120" name="l03120"></a><span class="lineno"> 3120</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03121" name="l03121"></a><span class="lineno"> 3121</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03122" name="l03122"></a><span class="lineno"> 3122</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: MPToken not found for &quot;</span> &lt;&lt; sender;</div>
<div class="line"><a id="l03123" name="l03123"></a><span class="lineno"> 3123</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="l03124" name="l03124"></a><span class="lineno"> 3124</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03125" name="l03125"></a><span class="lineno"> 3125</span> </div>
<div class="line"><a id="l03126" name="l03126"></a><span class="lineno"> 3126</span> <span class="keywordflow">if</span> (!sle-&gt;isFieldPresent(sfLockedAmount))</div>
<div class="line"><a id="l03127" name="l03127"></a><span class="lineno"> 3127</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03128" name="l03128"></a><span class="lineno"> 3128</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03129" name="l03129"></a><span class="lineno"> 3129</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: no locked amount in MPToken for &quot;</span></div>
<div class="line"><a id="l03130" name="l03130"></a><span class="lineno"> 3130</span> &lt;&lt; to_string(sender);</div>
<div class="line"><a id="l03131" name="l03131"></a><span class="lineno"> 3131</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03132" name="l03132"></a><span class="lineno"> 3132</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03133" name="l03133"></a><span class="lineno"> 3133</span> </div>
<div class="line"><a id="l03134" name="l03134"></a><span class="lineno"> 3134</span> <span class="keyword">auto</span> <span class="keyword">const</span> locked = sle-&gt;getFieldU64(sfLockedAmount);</div>
<div class="line"><a id="l03135" name="l03135"></a><span class="lineno"> 3135</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = grossAmount.<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="l03136" name="l03136"></a><span class="lineno"> 3136</span> </div>
<div class="line"><a id="l03137" name="l03137"></a><span class="lineno"> 3137</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03138" name="l03138"></a><span class="lineno"> 3138</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="l03139" name="l03139"></a><span class="lineno"> 3139</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03140" name="l03140"></a><span class="lineno"> 3140</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03141" name="l03141"></a><span class="lineno"> 3141</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient locked amount for &quot;</span></div>
<div class="line"><a id="l03142" name="l03142"></a><span class="lineno"> 3142</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="l03143" name="l03143"></a><span class="lineno"> 3143</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03144" name="l03144"></a><span class="lineno"> 3144</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03145" name="l03145"></a><span class="lineno"> 3145</span> </div>
<div class="line"><a id="l03146" name="l03146"></a><span class="lineno"> 3146</span> <span class="keyword">auto</span> <span class="keyword">const</span> newLocked = locked - delta;</div>
<div class="line"><a id="l03147" name="l03147"></a><span class="lineno"> 3147</span> <span class="keywordflow">if</span> (newLocked == 0)</div>
<div class="line"><a id="l03148" name="l03148"></a><span class="lineno"> 3148</span> sle-&gt;makeFieldAbsent(sfLockedAmount);</div>
<div class="line"><a id="l03149" name="l03149"></a><span class="lineno"> 3149</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03150" name="l03150"></a><span class="lineno"> 3150</span> sle-&gt;setFieldU64(sfLockedAmount, newLocked);</div>
<div class="line"><a id="l03151" name="l03151"></a><span class="lineno"> 3151</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sle);</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> </div>
<div class="line"><a id="l03154" name="l03154"></a><span class="lineno"> 3154</span> <span class="comment">// Note: The gross amount is the amount that was locked, the net</span></div>
<div class="line"><a id="l03155" name="l03155"></a><span class="lineno"> 3155</span> <span class="comment">// amount is the amount that is being unlocked. The difference is the fee</span></div>
<div class="line"><a id="l03156" name="l03156"></a><span class="lineno"> 3156</span> <span class="comment">// that was charged for the transfer. If this difference is greater than</span></div>
<div class="line"><a id="l03157" name="l03157"></a><span class="lineno"> 3157</span> <span class="comment">// zero, we need to update the outstanding amount.</span></div>
<div class="line"><a id="l03158" name="l03158"></a><span class="lineno"> 3158</span> <span class="keyword">auto</span> <span class="keyword">const</span> diff = grossAmount.<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>() - netAmount.<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="l03159" name="l03159"></a><span class="lineno"> 3159</span> <span class="keywordflow">if</span> (diff != 0)</div>
<div class="line"><a id="l03160" name="l03160"></a><span class="lineno"> 3160</span> {</div>
<div class="line"><a id="l03161" name="l03161"></a><span class="lineno"> 3161</span> <span class="keyword">auto</span> <span class="keyword">const</span> outstanding = sleIssuance-&gt;getFieldU64(sfOutstandingAmount);</div>
<div class="line"><a id="l03162" name="l03162"></a><span class="lineno"> 3162</span> <span class="comment">// Underflow check for subtraction</span></div>
<div class="line"><a id="l03163" name="l03163"></a><span class="lineno"> 3163</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(</div>
<div class="line"><a id="l03164" name="l03164"></a><span class="lineno"> 3164</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, diff)))</div>
<div class="line"><a id="l03165" name="l03165"></a><span class="lineno"> 3165</span> { <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l03166" name="l03166"></a><span class="lineno"> 3166</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l03167" name="l03167"></a><span class="lineno"> 3167</span> &lt;&lt; <span class="stringliteral">&quot;rippleUnlockEscrowMPT: insufficient outstanding amount for &quot;</span></div>
<div class="line"><a id="l03168" name="l03168"></a><span class="lineno"> 3168</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> &lt;&lt; diff;</div>
<div class="line"><a id="l03169" name="l03169"></a><span class="lineno"> 3169</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
<div class="line"><a id="l03170" name="l03170"></a><span class="lineno"> 3170</span> } <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l03171" name="l03171"></a><span class="lineno"> 3171</span> </div>
<div class="line"><a id="l03172" name="l03172"></a><span class="lineno"> 3172</span> sleIssuance-&gt;setFieldU64(sfOutstandingAmount, outstanding - diff);</div>
<div class="line"><a id="l03173" name="l03173"></a><span class="lineno"> 3173</span> view.<a class="code hl_function" href="classripple_1_1ApplyView.html#a542437b9b59a623e755979acdc075af5">update</a>(sleIssuance);</div>
<div class="line"><a id="l03174" name="l03174"></a><span class="lineno"> 3174</span> }</div>
<div class="line"><a id="l03175" name="l03175"></a><span class="lineno"> 3175</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l03176" name="l03176"></a><span class="lineno"> 3176</span>}</div>
</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 class="line"><a id="l03177" name="l03177"></a><span class="lineno"> 3177</span> </div>
<div class="line"><a id="l03178" name="l03178"></a><span class="lineno"> 3178</span><span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen03179" data-start="{" data-end="}">
<div class="line"><a id="l03179" name="l03179"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3"> 3179</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="l03180" name="l03180"></a><span class="lineno"> 3180</span>{</div>
<div class="line"><a id="l03181" name="l03181"></a><span class="lineno"> 3181</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="l03182" name="l03182"></a><span class="lineno"> 3182</span>}</div>
</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="line"><a id="l03183" name="l03183"></a><span class="lineno"> 3183</span> </div>
<div class="line"><a id="l03184" name="l03184"></a><span class="lineno"> 3184</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>
@@ -3501,6 +3529,7 @@ $(document).ready(function() { init_codefold(0); });
<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_a2bf72b4d8923d178f4cb5ed49cdc1e24"><div class="ttname"><a href="namespaceripple.html#a2bf72b4d8923d178f4cb5ed49cdc1e24">ripple::rippleUnlockEscrowMPT</a></div><div class="ttdeci">TER rippleUnlockEscrowMPT(ApplyView &amp;view, AccountID const &amp;sender, AccountID const &amp;receiver, STAmount const &amp;netAmount, STAmount const &amp;grossAmount, 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_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>
<div class="ttc" id="anamespaceripple_html_a33cfcdda48d70867c06c798f8a894ff0"><div class="ttname"><a href="namespaceripple.html#a33cfcdda48d70867c06c798f8a894ff0">ripple::rippleSendMPT</a></div><div class="ttdeci">static TER rippleSendMPT(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#l02023">View.cpp:2023</a></div></div>
@@ -3532,7 +3561,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="anamespaceripple_html_a4a9c7b33fef9015d6406302ef80b63c5ae4ade68db17e8ced60ea7cff04c7fc6d"><div class="ttname"><a href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5ae4ade68db17e8ced60ea7cff04c7fc6d">ripple::lsfLowDeepFreeze</a></div><div class="ttdeci">@ lsfLowDeepFreeze</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00167">LedgerFormats.h:167</a></div></div>
<div class="ttc" id="anamespaceripple_html_a4a9c7b33fef9015d6406302ef80b63c5ae6db21adf463a223e362b44f0fd54663"><div class="ttname"><a href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5ae6db21adf463a223e362b44f0fd54663">ripple::lsfHighAuth</a></div><div class="ttdeci">@ lsfHighAuth</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00162">LedgerFormats.h:162</a></div></div>
<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_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#l00771">View.h:771</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>
@@ -3554,7 +3583,6 @@ $(document).ready(function() { init_codefold(0); });
<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#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>
@@ -3593,8 +3621,8 @@ $(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#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_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#l03179">View.cpp:3179</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#l00934">View.h:934</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>