mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-27 06:25:51 +00:00
deploy: 9e1fe9a85e
This commit is contained in:
@@ -2469,314 +2469,325 @@ $(function() {
|
||||
<div class="line"><a id="l02391" name="l02391"></a><span class="lineno"> 2391</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = keylet::mptoken(mptIssuanceID, account);</div>
|
||||
<div class="line"><a id="l02392" name="l02392"></a><span class="lineno"> 2392</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleToken = view.<a class="code hl_function" href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">read</a>(keylet); <span class="comment">// NOTE: might be null</span></div>
|
||||
<div class="line"><a id="l02393" name="l02393"></a><span class="lineno"> 2393</span> <span class="keyword">auto</span> <span class="keyword">const</span> maybeDomainID = sleIssuance->at(~sfDomainID);</div>
|
||||
<div class="line"><a id="l02394" name="l02394"></a><span class="lineno"> 2394</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> authorizedByDomain = maybeDomainID.has_value() &&</div>
|
||||
<div class="line"><a id="l02395" name="l02395"></a><span class="lineno"> 2395</span> <a class="code hl_function" href="namespaceripple.html#ace07ad1d6a80473343ca26e55942008c">verifyValidDomain</a>(view, account, *maybeDomainID, j) == <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02396" name="l02396"></a><span class="lineno"> 2396</span> </div>
|
||||
<div class="line"><a id="l02397" name="l02397"></a><span class="lineno"> 2397</span> <span class="keywordflow">if</span> (!authorizedByDomain && sleToken == <span class="keyword">nullptr</span>)</div>
|
||||
<div class="line"><a id="l02398" name="l02398"></a><span class="lineno"> 2398</span> {</div>
|
||||
<div class="line"><a id="l02399" name="l02399"></a><span class="lineno"> 2399</span> <span class="comment">// Could not find MPToken and won't create one, could be either of:</span></div>
|
||||
<div class="line"><a id="l02400" name="l02400"></a><span class="lineno"> 2400</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02401" name="l02401"></a><span class="lineno"> 2401</span> <span class="comment">// 1. Field sfDomainID not set in MPTokenIssuance or</span></div>
|
||||
<div class="line"><a id="l02402" name="l02402"></a><span class="lineno"> 2402</span> <span class="comment">// 2. Account has no matching and accepted credentials or</span></div>
|
||||
<div class="line"><a id="l02403" name="l02403"></a><span class="lineno"> 2403</span> <span class="comment">// 3. Account has all expired credentials (deleted in verifyValidDomain)</span></div>
|
||||
<div class="line"><a id="l02404" name="l02404"></a><span class="lineno"> 2404</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02405" name="l02405"></a><span class="lineno"> 2405</span> <span class="comment">// Either way, return tecNO_AUTH and there is nothing else to do</span></div>
|
||||
<div class="line"><a id="l02406" name="l02406"></a><span class="lineno"> 2406</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">tecNO_AUTH</a>;</div>
|
||||
<div class="line"><a id="l02407" name="l02407"></a><span class="lineno"> 2407</span> }</div>
|
||||
<div class="line"><a id="l02408" name="l02408"></a><span class="lineno"> 2408</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!authorizedByDomain && maybeDomainID.has_value())</div>
|
||||
<div class="line"><a id="l02394" name="l02394"></a><span class="lineno"> 2394</span> <span class="keywordtype">bool</span> <a class="code hl_enumvalue" href="namespaceripple.html#a6eaff79c38106bc3b27326d878c902d3ac4bfb2a0bab0e91bc7dcfbe3bbec246e">expired</a> = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l02395" name="l02395"></a><span class="lineno"> 2395</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> authorizedByDomain = [&]() -> <span class="keywordtype">bool</span> {</div>
|
||||
<div class="line"><a id="l02396" name="l02396"></a><span class="lineno"> 2396</span> <span class="comment">// NOTE: defensive here, shuld be checked in preclaim</span></div>
|
||||
<div class="line"><a id="l02397" name="l02397"></a><span class="lineno"> 2397</span> <span class="keywordflow">if</span> (!maybeDomainID.has_value())</div>
|
||||
<div class="line"><a id="l02398" name="l02398"></a><span class="lineno"> 2398</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// LCOV_EXCL_LINE</span></div>
|
||||
<div class="line"><a id="l02399" name="l02399"></a><span class="lineno"> 2399</span> </div>
|
||||
<div class="line"><a id="l02400" name="l02400"></a><span class="lineno"> 2400</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a> = <a class="code hl_function" href="namespaceripple.html#ace07ad1d6a80473343ca26e55942008c">verifyValidDomain</a>(view, account, *maybeDomainID, j);</div>
|
||||
<div class="line"><a id="l02401" name="l02401"></a><span class="lineno"> 2401</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#ab48d5d1c4e2695c12f705e9d85fa560d">isTesSuccess</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>))</div>
|
||||
<div class="line"><a id="l02402" name="l02402"></a><span class="lineno"> 2402</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l02403" name="l02403"></a><span class="lineno"> 2403</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a> == <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">tecEXPIRED</a>)</div>
|
||||
<div class="line"><a id="l02404" name="l02404"></a><span class="lineno"> 2404</span> <a class="code hl_enumvalue" href="namespaceripple.html#a6eaff79c38106bc3b27326d878c902d3ac4bfb2a0bab0e91bc7dcfbe3bbec246e">expired</a> = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l02405" name="l02405"></a><span class="lineno"> 2405</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l02406" name="l02406"></a><span class="lineno"> 2406</span> }();</div>
|
||||
<div class="line"><a id="l02407" name="l02407"></a><span class="lineno"> 2407</span> </div>
|
||||
<div class="line"><a id="l02408" name="l02408"></a><span class="lineno"> 2408</span> <span class="keywordflow">if</span> (!authorizedByDomain && sleToken == <span class="keyword">nullptr</span>)</div>
|
||||
<div class="line"><a id="l02409" name="l02409"></a><span class="lineno"> 2409</span> {</div>
|
||||
<div class="line"><a id="l02410" name="l02410"></a><span class="lineno"> 2410</span> <span class="comment">// Found an MPToken but the account is not authorized and we expect</span></div>
|
||||
<div class="line"><a id="l02411" name="l02411"></a><span class="lineno"> 2411</span> <span class="comment">// it to have been authorized by the domain. This could be because the</span></div>
|
||||
<div class="line"><a id="l02412" name="l02412"></a><span class="lineno"> 2412</span> <span class="comment">// credentials used to create the MPToken have expired or been deleted.</span></div>
|
||||
<div class="line"><a id="l02413" name="l02413"></a><span class="lineno"> 2413</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">tecNO_AUTH</a>;</div>
|
||||
<div class="line"><a id="l02414" name="l02414"></a><span class="lineno"> 2414</span> }</div>
|
||||
<div class="line"><a id="l02415" name="l02415"></a><span class="lineno"> 2415</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!authorizedByDomain)</div>
|
||||
<div class="line"><a id="l02416" name="l02416"></a><span class="lineno"> 2416</span> {</div>
|
||||
<div class="line"><a id="l02417" name="l02417"></a><span class="lineno"> 2417</span> <span class="comment">// We found an MPToken, but sfDomainID is not set, so this is a classic</span></div>
|
||||
<div class="line"><a id="l02418" name="l02418"></a><span class="lineno"> 2418</span> <span class="comment">// MPToken which requires authorization by the token issuer.</span></div>
|
||||
<div class="line"><a id="l02419" name="l02419"></a><span class="lineno"> 2419</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02420" name="l02420"></a><span class="lineno"> 2420</span> sleToken != <span class="keyword">nullptr</span> && !maybeDomainID.has_value(),</div>
|
||||
<div class="line"><a id="l02421" name="l02421"></a><span class="lineno"> 2421</span> <span class="stringliteral">"ripple::enforceMPTokenAuthorization : found MPToken"</span>);</div>
|
||||
<div class="line"><a id="l02422" name="l02422"></a><span class="lineno"> 2422</span> <span class="keywordflow">if</span> (sleToken->isFlag(<a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5aaccd1c78b740e4c3ecc68cfe260bfeff">lsfMPTAuthorized</a>))</div>
|
||||
<div class="line"><a id="l02423" name="l02423"></a><span class="lineno"> 2423</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02424" name="l02424"></a><span class="lineno"> 2424</span> </div>
|
||||
<div class="line"><a id="l02425" name="l02425"></a><span class="lineno"> 2425</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">tecNO_AUTH</a>;</div>
|
||||
<div class="line"><a id="l02426" name="l02426"></a><span class="lineno"> 2426</span> }</div>
|
||||
<div class="line"><a id="l02427" name="l02427"></a><span class="lineno"> 2427</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (authorizedByDomain && sleToken != <span class="keyword">nullptr</span>)</div>
|
||||
<div class="line"><a id="l02428" name="l02428"></a><span class="lineno"> 2428</span> {</div>
|
||||
<div class="line"><a id="l02429" name="l02429"></a><span class="lineno"> 2429</span> <span class="comment">// Found an MPToken, authorized by the domain. Ignore authorization flag</span></div>
|
||||
<div class="line"><a id="l02430" name="l02430"></a><span class="lineno"> 2430</span> <span class="comment">// lsfMPTAuthorized because it is meaningless. Return tesSUCCESS</span></div>
|
||||
<div class="line"><a id="l02431" name="l02431"></a><span class="lineno"> 2431</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02432" name="l02432"></a><span class="lineno"> 2432</span> maybeDomainID.has_value(),</div>
|
||||
<div class="line"><a id="l02433" name="l02433"></a><span class="lineno"> 2433</span> <span class="stringliteral">"ripple::enforceMPTokenAuthorization : found MPToken for domain"</span>);</div>
|
||||
<div class="line"><a id="l02434" name="l02434"></a><span class="lineno"> 2434</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02435" name="l02435"></a><span class="lineno"> 2435</span> }</div>
|
||||
<div class="line"><a id="l02436" name="l02436"></a><span class="lineno"> 2436</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (authorizedByDomain)</div>
|
||||
<div class="line"><a id="l02437" name="l02437"></a><span class="lineno"> 2437</span> {</div>
|
||||
<div class="line"><a id="l02438" name="l02438"></a><span class="lineno"> 2438</span> <span class="comment">// Could not find MPToken but there should be one because we are</span></div>
|
||||
<div class="line"><a id="l02439" name="l02439"></a><span class="lineno"> 2439</span> <span class="comment">// authorized by domain. Proceed to create it, then return tesSUCCESS</span></div>
|
||||
<div class="line"><a id="l02440" name="l02440"></a><span class="lineno"> 2440</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02441" name="l02441"></a><span class="lineno"> 2441</span> maybeDomainID.has_value() && sleToken == <span class="keyword">nullptr</span>,</div>
|
||||
<div class="line"><a id="l02442" name="l02442"></a><span class="lineno"> 2442</span> <span class="stringliteral">"ripple::enforceMPTokenAuthorization : new MPToken for domain"</span>);</div>
|
||||
<div class="line"><a id="l02443" name="l02443"></a><span class="lineno"> 2443</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> err = MPTokenAuthorize::authorize(</div>
|
||||
<div class="line"><a id="l02444" name="l02444"></a><span class="lineno"> 2444</span> view,</div>
|
||||
<div class="line"><a id="l02445" name="l02445"></a><span class="lineno"> 2445</span> j,</div>
|
||||
<div class="line"><a id="l02446" name="l02446"></a><span class="lineno"> 2446</span> {</div>
|
||||
<div class="line"><a id="l02447" name="l02447"></a><span class="lineno"> 2447</span> .priorBalance = priorBalance,</div>
|
||||
<div class="line"><a id="l02448" name="l02448"></a><span class="lineno"> 2448</span> .mptIssuanceID = mptIssuanceID,</div>
|
||||
<div class="line"><a id="l02449" name="l02449"></a><span class="lineno"> 2449</span> .account = account,</div>
|
||||
<div class="line"><a id="l02450" name="l02450"></a><span class="lineno"> 2450</span> .flags = 0,</div>
|
||||
<div class="line"><a id="l02451" name="l02451"></a><span class="lineno"> 2451</span> });</div>
|
||||
<div class="line"><a id="l02452" name="l02452"></a><span class="lineno"> 2452</span> !<a class="code hl_function" href="namespaceripple.html#ab48d5d1c4e2695c12f705e9d85fa560d">isTesSuccess</a>(err))</div>
|
||||
<div class="line"><a id="l02453" name="l02453"></a><span class="lineno"> 2453</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l02454" name="l02454"></a><span class="lineno"> 2454</span> </div>
|
||||
<div class="line"><a id="l02455" name="l02455"></a><span class="lineno"> 2455</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02456" name="l02456"></a><span class="lineno"> 2456</span> }</div>
|
||||
<div class="line"><a id="l02457" name="l02457"></a><span class="lineno"> 2457</span> </div>
|
||||
<div class="line"><a id="l02458" name="l02458"></a><span class="lineno"> 2458</span> <span class="comment">// LCOV_EXCL_START</span></div>
|
||||
<div class="line"><a id="l02459" name="l02459"></a><span class="lineno"> 2459</span> UNREACHABLE(</div>
|
||||
<div class="line"><a id="l02460" name="l02460"></a><span class="lineno"> 2460</span> <span class="stringliteral">"ripple::enforceMPTokenAuthorization : condition list is incomplete"</span>);</div>
|
||||
<div class="line"><a id="l02461" name="l02461"></a><span class="lineno"> 2461</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ad035d214edc31c72362d7efbdaba234c">tefINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02462" name="l02462"></a><span class="lineno"> 2462</span>} <span class="comment">// LCOV_EXCL_STOP</span></div>
|
||||
<div class="line"><a id="l02463" name="l02463"></a><span class="lineno"> 2463</span> </div>
|
||||
<div class="line"><a id="l02464" name="l02464"></a><span class="lineno"> 2464</span>TER</div>
|
||||
<div class="line"><a id="l02465" name="l02465"></a><span class="lineno"><a class="line" href="namespaceripple.html#a70a62aa7e380540ed36762d3c02492f1"> 2465</a></span><a class="code hl_function" href="namespaceripple.html#a70a62aa7e380540ed36762d3c02492f1">canTransfer</a>(</div>
|
||||
<div class="line"><a id="l02466" name="l02466"></a><span class="lineno"> 2466</span> <a class="code hl_class" href="classripple_1_1ReadView.html">ReadView</a> <span class="keyword">const</span>& view,</div>
|
||||
<div class="line"><a id="l02467" name="l02467"></a><span class="lineno"> 2467</span> <a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a> <span class="keyword">const</span>& mptIssue,</div>
|
||||
<div class="line"><a id="l02468" name="l02468"></a><span class="lineno"> 2468</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& from,</div>
|
||||
<div class="line"><a id="l02469" name="l02469"></a><span class="lineno"> 2469</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& to)</div>
|
||||
<div class="line"><a id="l02470" name="l02470"></a><span class="lineno"> 2470</span>{</div>
|
||||
<div class="line"><a id="l02471" name="l02471"></a><span class="lineno"> 2471</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptID = keylet::mptIssuance(mptIssue.<a class="code hl_function" href="classripple_1_1MPTIssue.html#ad6cbfdbce5a5d92e1536fc9835b54757">getMptID</a>());</div>
|
||||
<div class="line"><a id="l02472" name="l02472"></a><span class="lineno"> 2472</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleIssuance = view.<a class="code hl_function" href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">read</a>(mptID);</div>
|
||||
<div class="line"><a id="l02473" name="l02473"></a><span class="lineno"> 2473</span> <span class="keywordflow">if</span> (!sleIssuance)</div>
|
||||
<div class="line"><a id="l02474" name="l02474"></a><span class="lineno"> 2474</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="l02475" name="l02475"></a><span class="lineno"> 2475</span> </div>
|
||||
<div class="line"><a id="l02476" name="l02476"></a><span class="lineno"> 2476</span> <span class="keywordflow">if</span> (!(sleIssuance->getFieldU32(sfFlags) & <a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a17ad00a34e73590b1c0d5f453eeba72f">lsfMPTCanTransfer</a>))</div>
|
||||
<div class="line"><a id="l02477" name="l02477"></a><span class="lineno"> 2477</span> {</div>
|
||||
<div class="line"><a id="l02478" name="l02478"></a><span class="lineno"> 2478</span> <span class="keywordflow">if</span> (from != (*sleIssuance)[sfIssuer] && to != (*sleIssuance)[sfIssuer])</div>
|
||||
<div class="line"><a id="l02479" name="l02479"></a><span class="lineno"> 2479</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a>{<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">tecNO_AUTH</a>};</div>
|
||||
<div class="line"><a id="l02480" name="l02480"></a><span class="lineno"> 2480</span> }</div>
|
||||
<div class="line"><a id="l02481" name="l02481"></a><span class="lineno"> 2481</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02482" name="l02482"></a><span class="lineno"> 2482</span>}</div>
|
||||
<div class="line"><a id="l02483" name="l02483"></a><span class="lineno"> 2483</span> </div>
|
||||
<div class="line"><a id="l02484" name="l02484"></a><span class="lineno"> 2484</span>TER</div>
|
||||
<div class="line"><a id="l02485" name="l02485"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac63838a9be23c18086f1f05c78867399"> 2485</a></span><a class="code hl_function" href="namespaceripple.html#ac63838a9be23c18086f1f05c78867399">cleanupOnAccountDelete</a>(</div>
|
||||
<div class="line"><a id="l02486" name="l02486"></a><span class="lineno"> 2486</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>& view,</div>
|
||||
<div class="line"><a id="l02487" name="l02487"></a><span class="lineno"> 2487</span> <a class="code hl_struct" href="structripple_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>& ownerDirKeylet,</div>
|
||||
<div class="line"><a id="l02488" name="l02488"></a><span class="lineno"> 2488</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">EntryDeleter</a> <span class="keyword">const</span>& deleter,</div>
|
||||
<div class="line"><a id="l02489" name="l02489"></a><span class="lineno"> 2489</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j,</div>
|
||||
<div class="line"><a id="l02490" name="l02490"></a><span class="lineno"> 2490</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional<uint16_t></a> maxNodesToDelete)</div>
|
||||
<div class="line"><a id="l02491" name="l02491"></a><span class="lineno"> 2491</span>{</div>
|
||||
<div class="line"><a id="l02492" name="l02492"></a><span class="lineno"> 2492</span> <span class="comment">// Delete all the entries in the account directory.</span></div>
|
||||
<div class="line"><a id="l02493" name="l02493"></a><span class="lineno"> 2493</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE></a> sleDirNode{};</div>
|
||||
<div class="line"><a id="l02494" name="l02494"></a><span class="lineno"> 2494</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uDirEntry{0};</div>
|
||||
<div class="line"><a id="l02495" name="l02495"></a><span class="lineno"> 2495</span> <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> dirEntry{beast::zero};</div>
|
||||
<div class="line"><a id="l02496" name="l02496"></a><span class="lineno"> 2496</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> deleted = 0;</div>
|
||||
<div class="line"><a id="l02497" name="l02497"></a><span class="lineno"> 2497</span> </div>
|
||||
<div class="line"><a id="l02498" name="l02498"></a><span class="lineno"> 2498</span> <span class="keywordflow">if</span> (view.<a class="code hl_function" href="classripple_1_1ReadView.html#ac1d377c35a8332d069b09be8f4008dec">exists</a>(ownerDirKeylet) &&</div>
|
||||
<div class="line"><a id="l02499" name="l02499"></a><span class="lineno"> 2499</span> <a class="code hl_function" href="namespaceripple.html#a34251c908a52d50d055160c19d6e6e56">dirFirst</a>(view, ownerDirKeylet.<a class="code hl_variable" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>, sleDirNode, uDirEntry, dirEntry))</div>
|
||||
<div class="line"><a id="l02500" name="l02500"></a><span class="lineno"> 2500</span> {</div>
|
||||
<div class="line"><a id="l02501" name="l02501"></a><span class="lineno"> 2501</span> <span class="keywordflow">do</span></div>
|
||||
<div class="line"><a id="l02502" name="l02502"></a><span class="lineno"> 2502</span> {</div>
|
||||
<div class="line"><a id="l02503" name="l02503"></a><span class="lineno"> 2503</span> <span class="keywordflow">if</span> (maxNodesToDelete && ++deleted > *maxNodesToDelete)</div>
|
||||
<div class="line"><a id="l02504" name="l02504"></a><span class="lineno"> 2504</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">tecINCOMPLETE</a>;</div>
|
||||
<div class="line"><a id="l02505" name="l02505"></a><span class="lineno"> 2505</span> </div>
|
||||
<div class="line"><a id="l02506" name="l02506"></a><span class="lineno"> 2506</span> <span class="comment">// Choose the right way to delete each directory node.</span></div>
|
||||
<div class="line"><a id="l02507" name="l02507"></a><span class="lineno"> 2507</span> <span class="keyword">auto</span> sleItem = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(keylet::child(dirEntry));</div>
|
||||
<div class="line"><a id="l02508" name="l02508"></a><span class="lineno"> 2508</span> <span class="keywordflow">if</span> (!sleItem)</div>
|
||||
<div class="line"><a id="l02509" name="l02509"></a><span class="lineno"> 2509</span> {</div>
|
||||
<div class="line"><a id="l02510" name="l02510"></a><span class="lineno"> 2510</span> <span class="comment">// Directory node has an invalid index. Bail out.</span></div>
|
||||
<div class="line"><a id="l02511" name="l02511"></a><span class="lineno"> 2511</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">fatal</a>())</div>
|
||||
<div class="line"><a id="l02512" name="l02512"></a><span class="lineno"> 2512</span> << <span class="stringliteral">"DeleteAccount: Directory node in ledger "</span> << view.<a class="code hl_function" href="classripple_1_1ReadView.html#ac284afc905c482953c35c61b459fd85b">seq</a>()</div>
|
||||
<div class="line"><a id="l02513" name="l02513"></a><span class="lineno"> 2513</span> << <span class="stringliteral">" has index to object that is missing: "</span></div>
|
||||
<div class="line"><a id="l02514" name="l02514"></a><span class="lineno"> 2514</span> << to_string(dirEntry);</div>
|
||||
<div class="line"><a id="l02515" name="l02515"></a><span class="lineno"> 2515</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">tefBAD_LEDGER</a>;</div>
|
||||
<div class="line"><a id="l02516" name="l02516"></a><span class="lineno"> 2516</span> }</div>
|
||||
<div class="line"><a id="l02517" name="l02517"></a><span class="lineno"> 2517</span> </div>
|
||||
<div class="line"><a id="l02518" name="l02518"></a><span class="lineno"> 2518</span> <a class="code hl_enumeration" href="namespaceripple.html#ac151bf19e1f4daae2b04c65c65117139">LedgerEntryType</a> <span class="keyword">const</span> nodeType{safe_cast<LedgerEntryType>(</div>
|
||||
<div class="line"><a id="l02519" name="l02519"></a><span class="lineno"> 2519</span> sleItem->getFieldU16(sfLedgerEntryType))};</div>
|
||||
<div class="line"><a id="l02520" name="l02520"></a><span class="lineno"> 2520</span> </div>
|
||||
<div class="line"><a id="l02521" name="l02521"></a><span class="lineno"> 2521</span> <span class="comment">// Deleter handles the details of specific account-owned object</span></div>
|
||||
<div class="line"><a id="l02522" name="l02522"></a><span class="lineno"> 2522</span> <span class="comment">// deletion</span></div>
|
||||
<div class="line"><a id="l02523" name="l02523"></a><span class="lineno"> 2523</span> <span class="keyword">auto</span> <span class="keyword">const</span> [<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>, skipEntry] = deleter(nodeType, dirEntry, sleItem);</div>
|
||||
<div class="line"><a id="l02524" name="l02524"></a><span class="lineno"> 2524</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a> != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
|
||||
<div class="line"><a id="l02525" name="l02525"></a><span class="lineno"> 2525</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>;</div>
|
||||
<div class="line"><a id="l02526" name="l02526"></a><span class="lineno"> 2526</span> </div>
|
||||
<div class="line"><a id="l02527" name="l02527"></a><span class="lineno"> 2527</span> <span class="comment">// dirFirst() and dirNext() are like iterators with exposed</span></div>
|
||||
<div class="line"><a id="l02528" name="l02528"></a><span class="lineno"> 2528</span> <span class="comment">// internal state. We'll take advantage of that exposed state</span></div>
|
||||
<div class="line"><a id="l02529" name="l02529"></a><span class="lineno"> 2529</span> <span class="comment">// to solve a common C++ problem: iterator invalidation while</span></div>
|
||||
<div class="line"><a id="l02530" name="l02530"></a><span class="lineno"> 2530</span> <span class="comment">// deleting elements from a container.</span></div>
|
||||
<div class="line"><a id="l02531" name="l02531"></a><span class="lineno"> 2531</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02532" name="l02532"></a><span class="lineno"> 2532</span> <span class="comment">// We have just deleted one directory entry, which means our</span></div>
|
||||
<div class="line"><a id="l02533" name="l02533"></a><span class="lineno"> 2533</span> <span class="comment">// "iterator state" is invalid.</span></div>
|
||||
<div class="line"><a id="l02534" name="l02534"></a><span class="lineno"> 2534</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02535" name="l02535"></a><span class="lineno"> 2535</span> <span class="comment">// 1. During the process of getting an entry from the</span></div>
|
||||
<div class="line"><a id="l02536" name="l02536"></a><span class="lineno"> 2536</span> <span class="comment">// directory uDirEntry was incremented from 'it' to 'it'+1.</span></div>
|
||||
<div class="line"><a id="l02537" name="l02537"></a><span class="lineno"> 2537</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02538" name="l02538"></a><span class="lineno"> 2538</span> <span class="comment">// 2. We then deleted the entry at index 'it', which means the</span></div>
|
||||
<div class="line"><a id="l02539" name="l02539"></a><span class="lineno"> 2539</span> <span class="comment">// entry that was at 'it'+1 has now moved to 'it'.</span></div>
|
||||
<div class="line"><a id="l02540" name="l02540"></a><span class="lineno"> 2540</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02541" name="l02541"></a><span class="lineno"> 2541</span> <span class="comment">// 3. So we verify that uDirEntry is indeed 'it'+1. Then we jam it</span></div>
|
||||
<div class="line"><a id="l02542" name="l02542"></a><span class="lineno"> 2542</span> <span class="comment">// back to 'it' to "un-invalidate" the iterator.</span></div>
|
||||
<div class="line"><a id="l02543" name="l02543"></a><span class="lineno"> 2543</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02544" name="l02544"></a><span class="lineno"> 2544</span> uDirEntry >= 1,</div>
|
||||
<div class="line"><a id="l02545" name="l02545"></a><span class="lineno"> 2545</span> <span class="stringliteral">"ripple::cleanupOnAccountDelete : minimum dir entries"</span>);</div>
|
||||
<div class="line"><a id="l02546" name="l02546"></a><span class="lineno"> 2546</span> <span class="keywordflow">if</span> (uDirEntry == 0)</div>
|
||||
<div class="line"><a id="l02547" name="l02547"></a><span class="lineno"> 2547</span> {</div>
|
||||
<div class="line"><a id="l02548" name="l02548"></a><span class="lineno"> 2548</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
|
||||
<div class="line"><a id="l02549" name="l02549"></a><span class="lineno"> 2549</span> << <span class="stringliteral">"DeleteAccount iterator re-validation failed."</span>;</div>
|
||||
<div class="line"><a id="l02550" name="l02550"></a><span class="lineno"> 2550</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">tefBAD_LEDGER</a>;</div>
|
||||
<div class="line"><a id="l02551" name="l02551"></a><span class="lineno"> 2551</span> }</div>
|
||||
<div class="line"><a id="l02552" name="l02552"></a><span class="lineno"> 2552</span> <span class="keywordflow">if</span> (skipEntry == SkipEntry::No)</div>
|
||||
<div class="line"><a id="l02553" name="l02553"></a><span class="lineno"> 2553</span> uDirEntry--;</div>
|
||||
<div class="line"><a id="l02554" name="l02554"></a><span class="lineno"> 2554</span> </div>
|
||||
<div class="line"><a id="l02555" name="l02555"></a><span class="lineno"> 2555</span> } <span class="keywordflow">while</span> (</div>
|
||||
<div class="line"><a id="l02556" name="l02556"></a><span class="lineno"> 2556</span> <a class="code hl_function" href="namespaceripple.html#a3a022ec9e19a1b18a0ac3bdf7328a877">dirNext</a>(view, ownerDirKeylet.<a class="code hl_variable" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>, sleDirNode, uDirEntry, dirEntry));</div>
|
||||
<div class="line"><a id="l02557" name="l02557"></a><span class="lineno"> 2557</span> }</div>
|
||||
<div class="line"><a id="l02558" name="l02558"></a><span class="lineno"> 2558</span> </div>
|
||||
<div class="line"><a id="l02559" name="l02559"></a><span class="lineno"> 2559</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02560" name="l02560"></a><span class="lineno"> 2560</span>}</div>
|
||||
<div class="line"><a id="l02561" name="l02561"></a><span class="lineno"> 2561</span> </div>
|
||||
<div class="line"><a id="l02562" name="l02562"></a><span class="lineno"> 2562</span>TER</div>
|
||||
<div class="line"><a id="l02563" name="l02563"></a><span class="lineno"><a class="line" href="namespaceripple.html#a2da08ee715495ec871618786c8afec80"> 2563</a></span><a class="code hl_function" href="namespaceripple.html#a2da08ee715495ec871618786c8afec80">deleteAMMTrustLine</a>(</div>
|
||||
<div class="line"><a id="l02564" name="l02564"></a><span class="lineno"> 2564</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>& view,</div>
|
||||
<div class="line"><a id="l02565" name="l02565"></a><span class="lineno"> 2565</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE></a> sleState,</div>
|
||||
<div class="line"><a id="l02566" name="l02566"></a><span class="lineno"> 2566</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional<AccountID></a> <span class="keyword">const</span>& ammAccountID,</div>
|
||||
<div class="line"><a id="l02567" name="l02567"></a><span class="lineno"> 2567</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
|
||||
<div class="line"><a id="l02568" name="l02568"></a><span class="lineno"> 2568</span>{</div>
|
||||
<div class="line"><a id="l02569" name="l02569"></a><span class="lineno"> 2569</span> <span class="keywordflow">if</span> (!sleState || sleState->getType() != ltRIPPLE_STATE)</div>
|
||||
<div class="line"><a id="l02570" name="l02570"></a><span class="lineno"> 2570</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02571" name="l02571"></a><span class="lineno"> 2571</span> </div>
|
||||
<div class="line"><a id="l02572" name="l02572"></a><span class="lineno"> 2572</span> <span class="keyword">auto</span> <span class="keyword">const</span>& [low, high] = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/minmax.html">std::minmax</a>(</div>
|
||||
<div class="line"><a id="l02573" name="l02573"></a><span class="lineno"> 2573</span> sleState->getFieldAmount(sfLowLimit).getIssuer(),</div>
|
||||
<div class="line"><a id="l02574" name="l02574"></a><span class="lineno"> 2574</span> sleState->getFieldAmount(sfHighLimit).getIssuer());</div>
|
||||
<div class="line"><a id="l02575" name="l02575"></a><span class="lineno"> 2575</span> <span class="keyword">auto</span> sleLow = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(keylet::account(low));</div>
|
||||
<div class="line"><a id="l02576" name="l02576"></a><span class="lineno"> 2576</span> <span class="keyword">auto</span> sleHigh = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(keylet::account(high));</div>
|
||||
<div class="line"><a id="l02577" name="l02577"></a><span class="lineno"> 2577</span> <span class="keywordflow">if</span> (!sleLow || !sleHigh)</div>
|
||||
<div class="line"><a id="l02578" name="l02578"></a><span class="lineno"> 2578</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02579" name="l02579"></a><span class="lineno"> 2579</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> ammLow = sleLow->isFieldPresent(sfAMMID);</div>
|
||||
<div class="line"><a id="l02580" name="l02580"></a><span class="lineno"> 2580</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> ammHigh = sleHigh->isFieldPresent(sfAMMID);</div>
|
||||
<div class="line"><a id="l02581" name="l02581"></a><span class="lineno"> 2581</span> </div>
|
||||
<div class="line"><a id="l02582" name="l02582"></a><span class="lineno"> 2582</span> <span class="comment">// can't both be AMM</span></div>
|
||||
<div class="line"><a id="l02583" name="l02583"></a><span class="lineno"> 2583</span> <span class="keywordflow">if</span> (ammLow && ammHigh)</div>
|
||||
<div class="line"><a id="l02584" name="l02584"></a><span class="lineno"> 2584</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02585" name="l02585"></a><span class="lineno"> 2585</span> </div>
|
||||
<div class="line"><a id="l02586" name="l02586"></a><span class="lineno"> 2586</span> <span class="comment">// at least one must be</span></div>
|
||||
<div class="line"><a id="l02587" name="l02587"></a><span class="lineno"> 2587</span> <span class="keywordflow">if</span> (!ammLow && !ammHigh)</div>
|
||||
<div class="line"><a id="l02588" name="l02588"></a><span class="lineno"> 2588</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178">terNO_AMM</a>;</div>
|
||||
<div class="line"><a id="l02589" name="l02589"></a><span class="lineno"> 2589</span> </div>
|
||||
<div class="line"><a id="l02590" name="l02590"></a><span class="lineno"> 2590</span> <span class="comment">// one must be the target amm</span></div>
|
||||
<div class="line"><a id="l02591" name="l02591"></a><span class="lineno"> 2591</span> <span class="keywordflow">if</span> (ammAccountID && (low != *ammAccountID && high != *ammAccountID))</div>
|
||||
<div class="line"><a id="l02592" name="l02592"></a><span class="lineno"> 2592</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178">terNO_AMM</a>;</div>
|
||||
<div class="line"><a id="l02593" name="l02593"></a><span class="lineno"> 2593</span> </div>
|
||||
<div class="line"><a id="l02594" name="l02594"></a><span class="lineno"> 2594</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a> = <a class="code hl_function" href="namespaceripple.html#aa12dc40888e62814a55117d12ab2b454">trustDelete</a>(view, sleState, low, high, j);</div>
|
||||
<div class="line"><a id="l02595" name="l02595"></a><span class="lineno"> 2595</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a> != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
|
||||
<div class="line"><a id="l02596" name="l02596"></a><span class="lineno"> 2596</span> {</div>
|
||||
<div class="line"><a id="l02597" name="l02597"></a><span class="lineno"> 2597</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
|
||||
<div class="line"><a id="l02598" name="l02598"></a><span class="lineno"> 2598</span> << <span class="stringliteral">"deleteAMMTrustLine: failed to delete the trustline."</span>;</div>
|
||||
<div class="line"><a id="l02599" name="l02599"></a><span class="lineno"> 2599</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>;</div>
|
||||
<div class="line"><a id="l02600" name="l02600"></a><span class="lineno"> 2600</span> }</div>
|
||||
<div class="line"><a id="l02601" name="l02601"></a><span class="lineno"> 2601</span> </div>
|
||||
<div class="line"><a id="l02602" name="l02602"></a><span class="lineno"> 2602</span> <span class="keyword">auto</span> <span class="keyword">const</span> uFlags = !ammLow ? <a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5ac704b653dce116dabb7ede80b711d953">lsfLowReserve</a> : <a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a753e9af2cd366aa69e76f62823acf9ec">lsfHighReserve</a>;</div>
|
||||
<div class="line"><a id="l02603" name="l02603"></a><span class="lineno"> 2603</span> <span class="keywordflow">if</span> (!(sleState->getFlags() & uFlags))</div>
|
||||
<div class="line"><a id="l02604" name="l02604"></a><span class="lineno"> 2604</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02605" name="l02605"></a><span class="lineno"> 2605</span> </div>
|
||||
<div class="line"><a id="l02606" name="l02606"></a><span class="lineno"> 2606</span> <a class="code hl_function" href="namespaceripple.html#a7e31af9d90dac8c9e4272bf597d83fb4">adjustOwnerCount</a>(view, !ammLow ? sleLow : sleHigh, -1, j);</div>
|
||||
<div class="line"><a id="l02607" name="l02607"></a><span class="lineno"> 2607</span> </div>
|
||||
<div class="line"><a id="l02608" name="l02608"></a><span class="lineno"> 2608</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02609" name="l02609"></a><span class="lineno"> 2609</span>}</div>
|
||||
<div class="line"><a id="l02610" name="l02610"></a><span class="lineno"> 2610</span> </div>
|
||||
<div class="line"><a id="l02611" name="l02611"></a><span class="lineno"> 2611</span>TER</div>
|
||||
<div class="line"><a id="l02612" name="l02612"></a><span class="lineno"><a class="line" href="namespaceripple.html#adbbbf76f04d55cd69f1740ed38330719"> 2612</a></span><a class="code hl_function" href="namespaceripple.html#adbbbf76f04d55cd69f1740ed38330719">rippleCredit</a>(</div>
|
||||
<div class="line"><a id="l02613" name="l02613"></a><span class="lineno"> 2613</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>& view,</div>
|
||||
<div class="line"><a id="l02614" name="l02614"></a><span class="lineno"> 2614</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& uSenderID,</div>
|
||||
<div class="line"><a id="l02615" name="l02615"></a><span class="lineno"> 2615</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& uReceiverID,</div>
|
||||
<div class="line"><a id="l02616" name="l02616"></a><span class="lineno"> 2616</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& saAmount,</div>
|
||||
<div class="line"><a id="l02617" name="l02617"></a><span class="lineno"> 2617</span> <span class="keywordtype">bool</span> bCheckIssuer,</div>
|
||||
<div class="line"><a id="l02618" name="l02618"></a><span class="lineno"> 2618</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
|
||||
<div class="line"><a id="l02619" name="l02619"></a><span class="lineno"> 2619</span>{</div>
|
||||
<div class="line"><a id="l02620" name="l02620"></a><span class="lineno"> 2620</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/variant/visit.html">std::visit</a>(</div>
|
||||
<div class="line"><a id="l02621" name="l02621"></a><span class="lineno"> 2621</span> [&]<<a class="code hl_concept" href="conceptripple_1_1ValidIssueType.html">ValidIssueType</a> TIss>(TIss <span class="keyword">const</span>& issue) {</div>
|
||||
<div class="line"><a id="l02622" name="l02622"></a><span class="lineno"> 2622</span> <span class="keywordflow">if</span> <span class="keyword">constexpr</span> (std::is_same_v<TIss, Issue>)</div>
|
||||
<div class="line"><a id="l02623" name="l02623"></a><span class="lineno"> 2623</span> {</div>
|
||||
<div class="line"><a id="l02624" name="l02624"></a><span class="lineno"> 2624</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a852ced93804c9ac7625fd2181db028f4">rippleCreditIOU</a>(</div>
|
||||
<div class="line"><a id="l02625" name="l02625"></a><span class="lineno"> 2625</span> view, uSenderID, uReceiverID, saAmount, bCheckIssuer, j);</div>
|
||||
<div class="line"><a id="l02626" name="l02626"></a><span class="lineno"> 2626</span> }</div>
|
||||
<div class="line"><a id="l02627" name="l02627"></a><span class="lineno"> 2627</span> <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a id="l02628" name="l02628"></a><span class="lineno"> 2628</span> {</div>
|
||||
<div class="line"><a id="l02629" name="l02629"></a><span class="lineno"> 2629</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02630" name="l02630"></a><span class="lineno"> 2630</span> !bCheckIssuer,</div>
|
||||
<div class="line"><a id="l02631" name="l02631"></a><span class="lineno"> 2631</span> <span class="stringliteral">"ripple::rippleCredit : not checking issuer"</span>);</div>
|
||||
<div class="line"><a id="l02632" name="l02632"></a><span class="lineno"> 2632</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#aee8453eabd14a72ee8c99afd9543f4ff">rippleCreditMPT</a>(</div>
|
||||
<div class="line"><a id="l02633" name="l02633"></a><span class="lineno"> 2633</span> view, uSenderID, uReceiverID, saAmount, j);</div>
|
||||
<div class="line"><a id="l02634" name="l02634"></a><span class="lineno"> 2634</span> }</div>
|
||||
<div class="line"><a id="l02635" name="l02635"></a><span class="lineno"> 2635</span> },</div>
|
||||
<div class="line"><a id="l02636" name="l02636"></a><span class="lineno"> 2636</span> saAmount.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>().<a class="code hl_function" href="classripple_1_1Asset.html#aa57a6038f59dbd5dd7b31cd18bf0ab95">value</a>());</div>
|
||||
<div class="line"><a id="l02637" name="l02637"></a><span class="lineno"> 2637</span>}</div>
|
||||
<div class="line"><a id="l02638" name="l02638"></a><span class="lineno"> 2638</span> </div>
|
||||
<div class="line"><a id="l02639" name="l02639"></a><span class="lineno"> 2639</span>[[nodiscard]] STAmount</div>
|
||||
<div class="line"><a id="l02640" name="l02640"></a><span class="lineno"><a class="line" href="namespaceripple.html#ad4f860310e3dfc97345c3b673f7cd5d7"> 2640</a></span><a class="code hl_function" href="namespaceripple.html#ad4f860310e3dfc97345c3b673f7cd5d7">assetsToSharesDeposit</a>(</div>
|
||||
<div class="line"><a id="l02641" name="l02641"></a><span class="lineno"> 2641</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& vault,</div>
|
||||
<div class="line"><a id="l02642" name="l02642"></a><span class="lineno"> 2642</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& issuance,</div>
|
||||
<div class="line"><a id="l02643" name="l02643"></a><span class="lineno"> 2643</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& assets)</div>
|
||||
<div class="line"><a id="l02644" name="l02644"></a><span class="lineno"> 2644</span>{</div>
|
||||
<div class="line"><a id="l02645" name="l02645"></a><span class="lineno"> 2645</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02646" name="l02646"></a><span class="lineno"> 2646</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault->at(sfAsset),</div>
|
||||
<div class="line"><a id="l02647" name="l02647"></a><span class="lineno"> 2647</span> <span class="stringliteral">"ripple::assetsToSharesDeposit : assets and vault match"</span>);</div>
|
||||
<div class="line"><a id="l02648" name="l02648"></a><span class="lineno"> 2648</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault->at(sfAssetsTotal);</div>
|
||||
<div class="line"><a id="l02649" name="l02649"></a><span class="lineno"> 2649</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> shares{vault->at(sfShareMPTID), <span class="keyword">static_cast<</span><a class="code hl_class" href="classripple_1_1Number.html">Number</a><span class="keyword">></span>(assets)};</div>
|
||||
<div class="line"><a id="l02650" name="l02650"></a><span class="lineno"> 2650</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
|
||||
<div class="line"><a id="l02651" name="l02651"></a><span class="lineno"> 2651</span> <span class="keywordflow">return</span> shares;</div>
|
||||
<div class="line"><a id="l02652" name="l02652"></a><span class="lineno"> 2652</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance->at(sfOutstandingAmount);</div>
|
||||
<div class="line"><a id="l02653" name="l02653"></a><span class="lineno"> 2653</span> shares = shareTotal * (assets / assetTotal);</div>
|
||||
<div class="line"><a id="l02654" name="l02654"></a><span class="lineno"> 2654</span> <span class="keywordflow">return</span> shares;</div>
|
||||
<div class="line"><a id="l02655" name="l02655"></a><span class="lineno"> 2655</span>}</div>
|
||||
<div class="line"><a id="l02656" name="l02656"></a><span class="lineno"> 2656</span> </div>
|
||||
<div class="line"><a id="l02657" name="l02657"></a><span class="lineno"> 2657</span>[[nodiscard]] STAmount</div>
|
||||
<div class="line"><a id="l02658" name="l02658"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac527f4be8f38f42794ec9a8981c71f25"> 2658</a></span><a class="code hl_function" href="namespaceripple.html#ac527f4be8f38f42794ec9a8981c71f25">assetsToSharesWithdraw</a>(</div>
|
||||
<div class="line"><a id="l02659" name="l02659"></a><span class="lineno"> 2659</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& vault,</div>
|
||||
<div class="line"><a id="l02660" name="l02660"></a><span class="lineno"> 2660</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& issuance,</div>
|
||||
<div class="line"><a id="l02661" name="l02661"></a><span class="lineno"> 2661</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& assets)</div>
|
||||
<div class="line"><a id="l02662" name="l02662"></a><span class="lineno"> 2662</span>{</div>
|
||||
<div class="line"><a id="l02663" name="l02663"></a><span class="lineno"> 2663</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02664" name="l02664"></a><span class="lineno"> 2664</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault->at(sfAsset),</div>
|
||||
<div class="line"><a id="l02665" name="l02665"></a><span class="lineno"> 2665</span> <span class="stringliteral">"ripple::assetsToSharesWithdraw : assets and vault match"</span>);</div>
|
||||
<div class="line"><a id="l02666" name="l02666"></a><span class="lineno"> 2666</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault->at(sfAssetsTotal);</div>
|
||||
<div class="line"><a id="l02667" name="l02667"></a><span class="lineno"> 2667</span> assetTotal -= vault->at(sfLossUnrealized);</div>
|
||||
<div class="line"><a id="l02668" name="l02668"></a><span class="lineno"> 2668</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> shares{vault->at(sfShareMPTID)};</div>
|
||||
<div class="line"><a id="l02669" name="l02669"></a><span class="lineno"> 2669</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
|
||||
<div class="line"><a id="l02670" name="l02670"></a><span class="lineno"> 2670</span> <span class="keywordflow">return</span> shares;</div>
|
||||
<div class="line"><a id="l02671" name="l02671"></a><span class="lineno"> 2671</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance->at(sfOutstandingAmount);</div>
|
||||
<div class="line"><a id="l02672" name="l02672"></a><span class="lineno"> 2672</span> shares = shareTotal * (assets / assetTotal);</div>
|
||||
<div class="line"><a id="l02673" name="l02673"></a><span class="lineno"> 2673</span> <span class="keywordflow">return</span> shares;</div>
|
||||
<div class="line"><a id="l02674" name="l02674"></a><span class="lineno"> 2674</span>}</div>
|
||||
<div class="line"><a id="l02675" name="l02675"></a><span class="lineno"> 2675</span> </div>
|
||||
<div class="line"><a id="l02676" name="l02676"></a><span class="lineno"> 2676</span>[[nodiscard]] STAmount</div>
|
||||
<div class="line"><a id="l02677" name="l02677"></a><span class="lineno"><a class="line" href="namespaceripple.html#a2538e2190b6fa5b9b2f10e74f64c905c"> 2677</a></span><a class="code hl_function" href="namespaceripple.html#a2538e2190b6fa5b9b2f10e74f64c905c">sharesToAssetsWithdraw</a>(</div>
|
||||
<div class="line"><a id="l02678" name="l02678"></a><span class="lineno"> 2678</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& vault,</div>
|
||||
<div class="line"><a id="l02679" name="l02679"></a><span class="lineno"> 2679</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& issuance,</div>
|
||||
<div class="line"><a id="l02680" name="l02680"></a><span class="lineno"> 2680</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& shares)</div>
|
||||
<div class="line"><a id="l02681" name="l02681"></a><span class="lineno"> 2681</span>{</div>
|
||||
<div class="line"><a id="l02682" name="l02682"></a><span class="lineno"> 2682</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02683" name="l02683"></a><span class="lineno"> 2683</span> shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault->at(sfShareMPTID),</div>
|
||||
<div class="line"><a id="l02684" name="l02684"></a><span class="lineno"> 2684</span> <span class="stringliteral">"ripple::sharesToAssetsWithdraw : shares and vault match"</span>);</div>
|
||||
<div class="line"><a id="l02685" name="l02685"></a><span class="lineno"> 2685</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault->at(sfAssetsTotal);</div>
|
||||
<div class="line"><a id="l02686" name="l02686"></a><span class="lineno"> 2686</span> assetTotal -= vault->at(sfLossUnrealized);</div>
|
||||
<div class="line"><a id="l02687" name="l02687"></a><span class="lineno"> 2687</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> assets{vault->at(sfAsset)};</div>
|
||||
<div class="line"><a id="l02688" name="l02688"></a><span class="lineno"> 2688</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
|
||||
<div class="line"><a id="l02689" name="l02689"></a><span class="lineno"> 2689</span> <span class="keywordflow">return</span> assets;</div>
|
||||
<div class="line"><a id="l02690" name="l02690"></a><span class="lineno"> 2690</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance->at(sfOutstandingAmount);</div>
|
||||
<div class="line"><a id="l02691" name="l02691"></a><span class="lineno"> 2691</span> assets = assetTotal * (shares / shareTotal);</div>
|
||||
<div class="line"><a id="l02692" name="l02692"></a><span class="lineno"> 2692</span> <span class="keywordflow">return</span> assets;</div>
|
||||
<div class="line"><a id="l02693" name="l02693"></a><span class="lineno"> 2693</span>}</div>
|
||||
<div class="line"><a id="l02694" name="l02694"></a><span class="lineno"> 2694</span> </div>
|
||||
<div class="line"><a id="l02695" name="l02695"></a><span class="lineno"> 2695</span><span class="keywordtype">bool</span></div>
|
||||
<div class="line"><a id="l02696" name="l02696"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3"> 2696</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="l02697" name="l02697"></a><span class="lineno"> 2697</span>{</div>
|
||||
<div class="line"><a id="l02698" name="l02698"></a><span class="lineno"> 2698</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() > mark;</div>
|
||||
<div class="line"><a id="l02699" name="l02699"></a><span class="lineno"> 2699</span>}</div>
|
||||
<div class="line"><a id="l02700" name="l02700"></a><span class="lineno"> 2700</span> </div>
|
||||
<div class="line"><a id="l02701" name="l02701"></a><span class="lineno"> 2701</span>} <span class="comment">// namespace ripple</span></div>
|
||||
<div class="line"><a id="l02410" name="l02410"></a><span class="lineno"> 2410</span> <span class="comment">// Could not find MPToken and won't create one, could be either of:</span></div>
|
||||
<div class="line"><a id="l02411" name="l02411"></a><span class="lineno"> 2411</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02412" name="l02412"></a><span class="lineno"> 2412</span> <span class="comment">// 1. Field sfDomainID not set in MPTokenIssuance or</span></div>
|
||||
<div class="line"><a id="l02413" name="l02413"></a><span class="lineno"> 2413</span> <span class="comment">// 2. Account has no matching and accepted credentials or</span></div>
|
||||
<div class="line"><a id="l02414" name="l02414"></a><span class="lineno"> 2414</span> <span class="comment">// 3. Account has all expired credentials (deleted in verifyValidDomain)</span></div>
|
||||
<div class="line"><a id="l02415" name="l02415"></a><span class="lineno"> 2415</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02416" name="l02416"></a><span class="lineno"> 2416</span> <span class="comment">// Either way, return tecNO_AUTH and there is nothing else to do</span></div>
|
||||
<div class="line"><a id="l02417" name="l02417"></a><span class="lineno"> 2417</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a6eaff79c38106bc3b27326d878c902d3ac4bfb2a0bab0e91bc7dcfbe3bbec246e">expired</a> ? <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">tecEXPIRED</a> : <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">tecNO_AUTH</a>;</div>
|
||||
<div class="line"><a id="l02418" name="l02418"></a><span class="lineno"> 2418</span> }</div>
|
||||
<div class="line"><a id="l02419" name="l02419"></a><span class="lineno"> 2419</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!authorizedByDomain && maybeDomainID.has_value())</div>
|
||||
<div class="line"><a id="l02420" name="l02420"></a><span class="lineno"> 2420</span> {</div>
|
||||
<div class="line"><a id="l02421" name="l02421"></a><span class="lineno"> 2421</span> <span class="comment">// Found an MPToken but the account is not authorized and we expect</span></div>
|
||||
<div class="line"><a id="l02422" name="l02422"></a><span class="lineno"> 2422</span> <span class="comment">// it to have been authorized by the domain. This could be because the</span></div>
|
||||
<div class="line"><a id="l02423" name="l02423"></a><span class="lineno"> 2423</span> <span class="comment">// credentials used to create the MPToken have expired or been deleted.</span></div>
|
||||
<div class="line"><a id="l02424" name="l02424"></a><span class="lineno"> 2424</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a6eaff79c38106bc3b27326d878c902d3ac4bfb2a0bab0e91bc7dcfbe3bbec246e">expired</a> ? <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">tecEXPIRED</a> : <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">tecNO_AUTH</a>;</div>
|
||||
<div class="line"><a id="l02425" name="l02425"></a><span class="lineno"> 2425</span> }</div>
|
||||
<div class="line"><a id="l02426" name="l02426"></a><span class="lineno"> 2426</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!authorizedByDomain)</div>
|
||||
<div class="line"><a id="l02427" name="l02427"></a><span class="lineno"> 2427</span> {</div>
|
||||
<div class="line"><a id="l02428" name="l02428"></a><span class="lineno"> 2428</span> <span class="comment">// We found an MPToken, but sfDomainID is not set, so this is a classic</span></div>
|
||||
<div class="line"><a id="l02429" name="l02429"></a><span class="lineno"> 2429</span> <span class="comment">// MPToken which requires authorization by the token issuer.</span></div>
|
||||
<div class="line"><a id="l02430" name="l02430"></a><span class="lineno"> 2430</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02431" name="l02431"></a><span class="lineno"> 2431</span> sleToken != <span class="keyword">nullptr</span> && !maybeDomainID.has_value(),</div>
|
||||
<div class="line"><a id="l02432" name="l02432"></a><span class="lineno"> 2432</span> <span class="stringliteral">"ripple::enforceMPTokenAuthorization : found MPToken"</span>);</div>
|
||||
<div class="line"><a id="l02433" name="l02433"></a><span class="lineno"> 2433</span> <span class="keywordflow">if</span> (sleToken->isFlag(<a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5aaccd1c78b740e4c3ecc68cfe260bfeff">lsfMPTAuthorized</a>))</div>
|
||||
<div class="line"><a id="l02434" name="l02434"></a><span class="lineno"> 2434</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02435" name="l02435"></a><span class="lineno"> 2435</span> </div>
|
||||
<div class="line"><a id="l02436" name="l02436"></a><span class="lineno"> 2436</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">tecNO_AUTH</a>;</div>
|
||||
<div class="line"><a id="l02437" name="l02437"></a><span class="lineno"> 2437</span> }</div>
|
||||
<div class="line"><a id="l02438" name="l02438"></a><span class="lineno"> 2438</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (authorizedByDomain && sleToken != <span class="keyword">nullptr</span>)</div>
|
||||
<div class="line"><a id="l02439" name="l02439"></a><span class="lineno"> 2439</span> {</div>
|
||||
<div class="line"><a id="l02440" name="l02440"></a><span class="lineno"> 2440</span> <span class="comment">// Found an MPToken, authorized by the domain. Ignore authorization flag</span></div>
|
||||
<div class="line"><a id="l02441" name="l02441"></a><span class="lineno"> 2441</span> <span class="comment">// lsfMPTAuthorized because it is meaningless. Return tesSUCCESS</span></div>
|
||||
<div class="line"><a id="l02442" name="l02442"></a><span class="lineno"> 2442</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02443" name="l02443"></a><span class="lineno"> 2443</span> maybeDomainID.has_value(),</div>
|
||||
<div class="line"><a id="l02444" name="l02444"></a><span class="lineno"> 2444</span> <span class="stringliteral">"ripple::enforceMPTokenAuthorization : found MPToken for domain"</span>);</div>
|
||||
<div class="line"><a id="l02445" name="l02445"></a><span class="lineno"> 2445</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02446" name="l02446"></a><span class="lineno"> 2446</span> }</div>
|
||||
<div class="line"><a id="l02447" name="l02447"></a><span class="lineno"> 2447</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (authorizedByDomain)</div>
|
||||
<div class="line"><a id="l02448" name="l02448"></a><span class="lineno"> 2448</span> {</div>
|
||||
<div class="line"><a id="l02449" name="l02449"></a><span class="lineno"> 2449</span> <span class="comment">// Could not find MPToken but there should be one because we are</span></div>
|
||||
<div class="line"><a id="l02450" name="l02450"></a><span class="lineno"> 2450</span> <span class="comment">// authorized by domain. Proceed to create it, then return tesSUCCESS</span></div>
|
||||
<div class="line"><a id="l02451" name="l02451"></a><span class="lineno"> 2451</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02452" name="l02452"></a><span class="lineno"> 2452</span> maybeDomainID.has_value() && sleToken == <span class="keyword">nullptr</span>,</div>
|
||||
<div class="line"><a id="l02453" name="l02453"></a><span class="lineno"> 2453</span> <span class="stringliteral">"ripple::enforceMPTokenAuthorization : new MPToken for domain"</span>);</div>
|
||||
<div class="line"><a id="l02454" name="l02454"></a><span class="lineno"> 2454</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> err = MPTokenAuthorize::authorize(</div>
|
||||
<div class="line"><a id="l02455" name="l02455"></a><span class="lineno"> 2455</span> view,</div>
|
||||
<div class="line"><a id="l02456" name="l02456"></a><span class="lineno"> 2456</span> j,</div>
|
||||
<div class="line"><a id="l02457" name="l02457"></a><span class="lineno"> 2457</span> {</div>
|
||||
<div class="line"><a id="l02458" name="l02458"></a><span class="lineno"> 2458</span> .priorBalance = priorBalance,</div>
|
||||
<div class="line"><a id="l02459" name="l02459"></a><span class="lineno"> 2459</span> .mptIssuanceID = mptIssuanceID,</div>
|
||||
<div class="line"><a id="l02460" name="l02460"></a><span class="lineno"> 2460</span> .account = account,</div>
|
||||
<div class="line"><a id="l02461" name="l02461"></a><span class="lineno"> 2461</span> .flags = 0,</div>
|
||||
<div class="line"><a id="l02462" name="l02462"></a><span class="lineno"> 2462</span> });</div>
|
||||
<div class="line"><a id="l02463" name="l02463"></a><span class="lineno"> 2463</span> !<a class="code hl_function" href="namespaceripple.html#ab48d5d1c4e2695c12f705e9d85fa560d">isTesSuccess</a>(err))</div>
|
||||
<div class="line"><a id="l02464" name="l02464"></a><span class="lineno"> 2464</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l02465" name="l02465"></a><span class="lineno"> 2465</span> </div>
|
||||
<div class="line"><a id="l02466" name="l02466"></a><span class="lineno"> 2466</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02467" name="l02467"></a><span class="lineno"> 2467</span> }</div>
|
||||
<div class="line"><a id="l02468" name="l02468"></a><span class="lineno"> 2468</span> </div>
|
||||
<div class="line"><a id="l02469" name="l02469"></a><span class="lineno"> 2469</span> <span class="comment">// LCOV_EXCL_START</span></div>
|
||||
<div class="line"><a id="l02470" name="l02470"></a><span class="lineno"> 2470</span> UNREACHABLE(</div>
|
||||
<div class="line"><a id="l02471" name="l02471"></a><span class="lineno"> 2471</span> <span class="stringliteral">"ripple::enforceMPTokenAuthorization : condition list is incomplete"</span>);</div>
|
||||
<div class="line"><a id="l02472" name="l02472"></a><span class="lineno"> 2472</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ad035d214edc31c72362d7efbdaba234c">tefINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02473" name="l02473"></a><span class="lineno"> 2473</span>} <span class="comment">// LCOV_EXCL_STOP</span></div>
|
||||
<div class="line"><a id="l02474" name="l02474"></a><span class="lineno"> 2474</span> </div>
|
||||
<div class="line"><a id="l02475" name="l02475"></a><span class="lineno"> 2475</span>TER</div>
|
||||
<div class="line"><a id="l02476" name="l02476"></a><span class="lineno"><a class="line" href="namespaceripple.html#a70a62aa7e380540ed36762d3c02492f1"> 2476</a></span><a class="code hl_function" href="namespaceripple.html#a70a62aa7e380540ed36762d3c02492f1">canTransfer</a>(</div>
|
||||
<div class="line"><a id="l02477" name="l02477"></a><span class="lineno"> 2477</span> <a class="code hl_class" href="classripple_1_1ReadView.html">ReadView</a> <span class="keyword">const</span>& view,</div>
|
||||
<div class="line"><a id="l02478" name="l02478"></a><span class="lineno"> 2478</span> <a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a> <span class="keyword">const</span>& mptIssue,</div>
|
||||
<div class="line"><a id="l02479" name="l02479"></a><span class="lineno"> 2479</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& from,</div>
|
||||
<div class="line"><a id="l02480" name="l02480"></a><span class="lineno"> 2480</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& to)</div>
|
||||
<div class="line"><a id="l02481" name="l02481"></a><span class="lineno"> 2481</span>{</div>
|
||||
<div class="line"><a id="l02482" name="l02482"></a><span class="lineno"> 2482</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptID = keylet::mptIssuance(mptIssue.<a class="code hl_function" href="classripple_1_1MPTIssue.html#ad6cbfdbce5a5d92e1536fc9835b54757">getMptID</a>());</div>
|
||||
<div class="line"><a id="l02483" name="l02483"></a><span class="lineno"> 2483</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleIssuance = view.<a class="code hl_function" href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">read</a>(mptID);</div>
|
||||
<div class="line"><a id="l02484" name="l02484"></a><span class="lineno"> 2484</span> <span class="keywordflow">if</span> (!sleIssuance)</div>
|
||||
<div class="line"><a id="l02485" name="l02485"></a><span class="lineno"> 2485</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="l02486" name="l02486"></a><span class="lineno"> 2486</span> </div>
|
||||
<div class="line"><a id="l02487" name="l02487"></a><span class="lineno"> 2487</span> <span class="keywordflow">if</span> (!(sleIssuance->getFieldU32(sfFlags) & <a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a17ad00a34e73590b1c0d5f453eeba72f">lsfMPTCanTransfer</a>))</div>
|
||||
<div class="line"><a id="l02488" name="l02488"></a><span class="lineno"> 2488</span> {</div>
|
||||
<div class="line"><a id="l02489" name="l02489"></a><span class="lineno"> 2489</span> <span class="keywordflow">if</span> (from != (*sleIssuance)[sfIssuer] && to != (*sleIssuance)[sfIssuer])</div>
|
||||
<div class="line"><a id="l02490" name="l02490"></a><span class="lineno"> 2490</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a>{<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">tecNO_AUTH</a>};</div>
|
||||
<div class="line"><a id="l02491" name="l02491"></a><span class="lineno"> 2491</span> }</div>
|
||||
<div class="line"><a id="l02492" name="l02492"></a><span class="lineno"> 2492</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02493" name="l02493"></a><span class="lineno"> 2493</span>}</div>
|
||||
<div class="line"><a id="l02494" name="l02494"></a><span class="lineno"> 2494</span> </div>
|
||||
<div class="line"><a id="l02495" name="l02495"></a><span class="lineno"> 2495</span>TER</div>
|
||||
<div class="line"><a id="l02496" name="l02496"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac63838a9be23c18086f1f05c78867399"> 2496</a></span><a class="code hl_function" href="namespaceripple.html#ac63838a9be23c18086f1f05c78867399">cleanupOnAccountDelete</a>(</div>
|
||||
<div class="line"><a id="l02497" name="l02497"></a><span class="lineno"> 2497</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>& view,</div>
|
||||
<div class="line"><a id="l02498" name="l02498"></a><span class="lineno"> 2498</span> <a class="code hl_struct" href="structripple_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>& ownerDirKeylet,</div>
|
||||
<div class="line"><a id="l02499" name="l02499"></a><span class="lineno"> 2499</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">EntryDeleter</a> <span class="keyword">const</span>& deleter,</div>
|
||||
<div class="line"><a id="l02500" name="l02500"></a><span class="lineno"> 2500</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j,</div>
|
||||
<div class="line"><a id="l02501" name="l02501"></a><span class="lineno"> 2501</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional<uint16_t></a> maxNodesToDelete)</div>
|
||||
<div class="line"><a id="l02502" name="l02502"></a><span class="lineno"> 2502</span>{</div>
|
||||
<div class="line"><a id="l02503" name="l02503"></a><span class="lineno"> 2503</span> <span class="comment">// Delete all the entries in the account directory.</span></div>
|
||||
<div class="line"><a id="l02504" name="l02504"></a><span class="lineno"> 2504</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE></a> sleDirNode{};</div>
|
||||
<div class="line"><a id="l02505" name="l02505"></a><span class="lineno"> 2505</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uDirEntry{0};</div>
|
||||
<div class="line"><a id="l02506" name="l02506"></a><span class="lineno"> 2506</span> <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> dirEntry{beast::zero};</div>
|
||||
<div class="line"><a id="l02507" name="l02507"></a><span class="lineno"> 2507</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> deleted = 0;</div>
|
||||
<div class="line"><a id="l02508" name="l02508"></a><span class="lineno"> 2508</span> </div>
|
||||
<div class="line"><a id="l02509" name="l02509"></a><span class="lineno"> 2509</span> <span class="keywordflow">if</span> (view.<a class="code hl_function" href="classripple_1_1ReadView.html#ac1d377c35a8332d069b09be8f4008dec">exists</a>(ownerDirKeylet) &&</div>
|
||||
<div class="line"><a id="l02510" name="l02510"></a><span class="lineno"> 2510</span> <a class="code hl_function" href="namespaceripple.html#a34251c908a52d50d055160c19d6e6e56">dirFirst</a>(view, ownerDirKeylet.<a class="code hl_variable" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>, sleDirNode, uDirEntry, dirEntry))</div>
|
||||
<div class="line"><a id="l02511" name="l02511"></a><span class="lineno"> 2511</span> {</div>
|
||||
<div class="line"><a id="l02512" name="l02512"></a><span class="lineno"> 2512</span> <span class="keywordflow">do</span></div>
|
||||
<div class="line"><a id="l02513" name="l02513"></a><span class="lineno"> 2513</span> {</div>
|
||||
<div class="line"><a id="l02514" name="l02514"></a><span class="lineno"> 2514</span> <span class="keywordflow">if</span> (maxNodesToDelete && ++deleted > *maxNodesToDelete)</div>
|
||||
<div class="line"><a id="l02515" name="l02515"></a><span class="lineno"> 2515</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">tecINCOMPLETE</a>;</div>
|
||||
<div class="line"><a id="l02516" name="l02516"></a><span class="lineno"> 2516</span> </div>
|
||||
<div class="line"><a id="l02517" name="l02517"></a><span class="lineno"> 2517</span> <span class="comment">// Choose the right way to delete each directory node.</span></div>
|
||||
<div class="line"><a id="l02518" name="l02518"></a><span class="lineno"> 2518</span> <span class="keyword">auto</span> sleItem = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(keylet::child(dirEntry));</div>
|
||||
<div class="line"><a id="l02519" name="l02519"></a><span class="lineno"> 2519</span> <span class="keywordflow">if</span> (!sleItem)</div>
|
||||
<div class="line"><a id="l02520" name="l02520"></a><span class="lineno"> 2520</span> {</div>
|
||||
<div class="line"><a id="l02521" name="l02521"></a><span class="lineno"> 2521</span> <span class="comment">// Directory node has an invalid index. Bail out.</span></div>
|
||||
<div class="line"><a id="l02522" name="l02522"></a><span class="lineno"> 2522</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">fatal</a>())</div>
|
||||
<div class="line"><a id="l02523" name="l02523"></a><span class="lineno"> 2523</span> << <span class="stringliteral">"DeleteAccount: Directory node in ledger "</span> << view.<a class="code hl_function" href="classripple_1_1ReadView.html#ac284afc905c482953c35c61b459fd85b">seq</a>()</div>
|
||||
<div class="line"><a id="l02524" name="l02524"></a><span class="lineno"> 2524</span> << <span class="stringliteral">" has index to object that is missing: "</span></div>
|
||||
<div class="line"><a id="l02525" name="l02525"></a><span class="lineno"> 2525</span> << to_string(dirEntry);</div>
|
||||
<div class="line"><a id="l02526" name="l02526"></a><span class="lineno"> 2526</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">tefBAD_LEDGER</a>;</div>
|
||||
<div class="line"><a id="l02527" name="l02527"></a><span class="lineno"> 2527</span> }</div>
|
||||
<div class="line"><a id="l02528" name="l02528"></a><span class="lineno"> 2528</span> </div>
|
||||
<div class="line"><a id="l02529" name="l02529"></a><span class="lineno"> 2529</span> <a class="code hl_enumeration" href="namespaceripple.html#ac151bf19e1f4daae2b04c65c65117139">LedgerEntryType</a> <span class="keyword">const</span> nodeType{safe_cast<LedgerEntryType>(</div>
|
||||
<div class="line"><a id="l02530" name="l02530"></a><span class="lineno"> 2530</span> sleItem->getFieldU16(sfLedgerEntryType))};</div>
|
||||
<div class="line"><a id="l02531" name="l02531"></a><span class="lineno"> 2531</span> </div>
|
||||
<div class="line"><a id="l02532" name="l02532"></a><span class="lineno"> 2532</span> <span class="comment">// Deleter handles the details of specific account-owned object</span></div>
|
||||
<div class="line"><a id="l02533" name="l02533"></a><span class="lineno"> 2533</span> <span class="comment">// deletion</span></div>
|
||||
<div class="line"><a id="l02534" name="l02534"></a><span class="lineno"> 2534</span> <span class="keyword">auto</span> <span class="keyword">const</span> [<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>, skipEntry] = deleter(nodeType, dirEntry, sleItem);</div>
|
||||
<div class="line"><a id="l02535" name="l02535"></a><span class="lineno"> 2535</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a> != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
|
||||
<div class="line"><a id="l02536" name="l02536"></a><span class="lineno"> 2536</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>;</div>
|
||||
<div class="line"><a id="l02537" name="l02537"></a><span class="lineno"> 2537</span> </div>
|
||||
<div class="line"><a id="l02538" name="l02538"></a><span class="lineno"> 2538</span> <span class="comment">// dirFirst() and dirNext() are like iterators with exposed</span></div>
|
||||
<div class="line"><a id="l02539" name="l02539"></a><span class="lineno"> 2539</span> <span class="comment">// internal state. We'll take advantage of that exposed state</span></div>
|
||||
<div class="line"><a id="l02540" name="l02540"></a><span class="lineno"> 2540</span> <span class="comment">// to solve a common C++ problem: iterator invalidation while</span></div>
|
||||
<div class="line"><a id="l02541" name="l02541"></a><span class="lineno"> 2541</span> <span class="comment">// deleting elements from a container.</span></div>
|
||||
<div class="line"><a id="l02542" name="l02542"></a><span class="lineno"> 2542</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02543" name="l02543"></a><span class="lineno"> 2543</span> <span class="comment">// We have just deleted one directory entry, which means our</span></div>
|
||||
<div class="line"><a id="l02544" name="l02544"></a><span class="lineno"> 2544</span> <span class="comment">// "iterator state" is invalid.</span></div>
|
||||
<div class="line"><a id="l02545" name="l02545"></a><span class="lineno"> 2545</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02546" name="l02546"></a><span class="lineno"> 2546</span> <span class="comment">// 1. During the process of getting an entry from the</span></div>
|
||||
<div class="line"><a id="l02547" name="l02547"></a><span class="lineno"> 2547</span> <span class="comment">// directory uDirEntry was incremented from 'it' to 'it'+1.</span></div>
|
||||
<div class="line"><a id="l02548" name="l02548"></a><span class="lineno"> 2548</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02549" name="l02549"></a><span class="lineno"> 2549</span> <span class="comment">// 2. We then deleted the entry at index 'it', which means the</span></div>
|
||||
<div class="line"><a id="l02550" name="l02550"></a><span class="lineno"> 2550</span> <span class="comment">// entry that was at 'it'+1 has now moved to 'it'.</span></div>
|
||||
<div class="line"><a id="l02551" name="l02551"></a><span class="lineno"> 2551</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l02552" name="l02552"></a><span class="lineno"> 2552</span> <span class="comment">// 3. So we verify that uDirEntry is indeed 'it'+1. Then we jam it</span></div>
|
||||
<div class="line"><a id="l02553" name="l02553"></a><span class="lineno"> 2553</span> <span class="comment">// back to 'it' to "un-invalidate" the iterator.</span></div>
|
||||
<div class="line"><a id="l02554" name="l02554"></a><span class="lineno"> 2554</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02555" name="l02555"></a><span class="lineno"> 2555</span> uDirEntry >= 1,</div>
|
||||
<div class="line"><a id="l02556" name="l02556"></a><span class="lineno"> 2556</span> <span class="stringliteral">"ripple::cleanupOnAccountDelete : minimum dir entries"</span>);</div>
|
||||
<div class="line"><a id="l02557" name="l02557"></a><span class="lineno"> 2557</span> <span class="keywordflow">if</span> (uDirEntry == 0)</div>
|
||||
<div class="line"><a id="l02558" name="l02558"></a><span class="lineno"> 2558</span> {</div>
|
||||
<div class="line"><a id="l02559" name="l02559"></a><span class="lineno"> 2559</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
|
||||
<div class="line"><a id="l02560" name="l02560"></a><span class="lineno"> 2560</span> << <span class="stringliteral">"DeleteAccount iterator re-validation failed."</span>;</div>
|
||||
<div class="line"><a id="l02561" name="l02561"></a><span class="lineno"> 2561</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">tefBAD_LEDGER</a>;</div>
|
||||
<div class="line"><a id="l02562" name="l02562"></a><span class="lineno"> 2562</span> }</div>
|
||||
<div class="line"><a id="l02563" name="l02563"></a><span class="lineno"> 2563</span> <span class="keywordflow">if</span> (skipEntry == SkipEntry::No)</div>
|
||||
<div class="line"><a id="l02564" name="l02564"></a><span class="lineno"> 2564</span> uDirEntry--;</div>
|
||||
<div class="line"><a id="l02565" name="l02565"></a><span class="lineno"> 2565</span> </div>
|
||||
<div class="line"><a id="l02566" name="l02566"></a><span class="lineno"> 2566</span> } <span class="keywordflow">while</span> (</div>
|
||||
<div class="line"><a id="l02567" name="l02567"></a><span class="lineno"> 2567</span> <a class="code hl_function" href="namespaceripple.html#a3a022ec9e19a1b18a0ac3bdf7328a877">dirNext</a>(view, ownerDirKeylet.<a class="code hl_variable" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>, sleDirNode, uDirEntry, dirEntry));</div>
|
||||
<div class="line"><a id="l02568" name="l02568"></a><span class="lineno"> 2568</span> }</div>
|
||||
<div class="line"><a id="l02569" name="l02569"></a><span class="lineno"> 2569</span> </div>
|
||||
<div class="line"><a id="l02570" name="l02570"></a><span class="lineno"> 2570</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02571" name="l02571"></a><span class="lineno"> 2571</span>}</div>
|
||||
<div class="line"><a id="l02572" name="l02572"></a><span class="lineno"> 2572</span> </div>
|
||||
<div class="line"><a id="l02573" name="l02573"></a><span class="lineno"> 2573</span>TER</div>
|
||||
<div class="line"><a id="l02574" name="l02574"></a><span class="lineno"><a class="line" href="namespaceripple.html#a2da08ee715495ec871618786c8afec80"> 2574</a></span><a class="code hl_function" href="namespaceripple.html#a2da08ee715495ec871618786c8afec80">deleteAMMTrustLine</a>(</div>
|
||||
<div class="line"><a id="l02575" name="l02575"></a><span class="lineno"> 2575</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>& view,</div>
|
||||
<div class="line"><a id="l02576" name="l02576"></a><span class="lineno"> 2576</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE></a> sleState,</div>
|
||||
<div class="line"><a id="l02577" name="l02577"></a><span class="lineno"> 2577</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional<AccountID></a> <span class="keyword">const</span>& ammAccountID,</div>
|
||||
<div class="line"><a id="l02578" name="l02578"></a><span class="lineno"> 2578</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
|
||||
<div class="line"><a id="l02579" name="l02579"></a><span class="lineno"> 2579</span>{</div>
|
||||
<div class="line"><a id="l02580" name="l02580"></a><span class="lineno"> 2580</span> <span class="keywordflow">if</span> (!sleState || sleState->getType() != ltRIPPLE_STATE)</div>
|
||||
<div class="line"><a id="l02581" name="l02581"></a><span class="lineno"> 2581</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02582" name="l02582"></a><span class="lineno"> 2582</span> </div>
|
||||
<div class="line"><a id="l02583" name="l02583"></a><span class="lineno"> 2583</span> <span class="keyword">auto</span> <span class="keyword">const</span>& [low, high] = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/minmax.html">std::minmax</a>(</div>
|
||||
<div class="line"><a id="l02584" name="l02584"></a><span class="lineno"> 2584</span> sleState->getFieldAmount(sfLowLimit).getIssuer(),</div>
|
||||
<div class="line"><a id="l02585" name="l02585"></a><span class="lineno"> 2585</span> sleState->getFieldAmount(sfHighLimit).getIssuer());</div>
|
||||
<div class="line"><a id="l02586" name="l02586"></a><span class="lineno"> 2586</span> <span class="keyword">auto</span> sleLow = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(keylet::account(low));</div>
|
||||
<div class="line"><a id="l02587" name="l02587"></a><span class="lineno"> 2587</span> <span class="keyword">auto</span> sleHigh = view.<a class="code hl_function" href="classripple_1_1ApplyView.html#afa666aaa8eb0080d96f910f8a719291d">peek</a>(keylet::account(high));</div>
|
||||
<div class="line"><a id="l02588" name="l02588"></a><span class="lineno"> 2588</span> <span class="keywordflow">if</span> (!sleLow || !sleHigh)</div>
|
||||
<div class="line"><a id="l02589" name="l02589"></a><span class="lineno"> 2589</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02590" name="l02590"></a><span class="lineno"> 2590</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> ammLow = sleLow->isFieldPresent(sfAMMID);</div>
|
||||
<div class="line"><a id="l02591" name="l02591"></a><span class="lineno"> 2591</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> ammHigh = sleHigh->isFieldPresent(sfAMMID);</div>
|
||||
<div class="line"><a id="l02592" name="l02592"></a><span class="lineno"> 2592</span> </div>
|
||||
<div class="line"><a id="l02593" name="l02593"></a><span class="lineno"> 2593</span> <span class="comment">// can't both be AMM</span></div>
|
||||
<div class="line"><a id="l02594" name="l02594"></a><span class="lineno"> 2594</span> <span class="keywordflow">if</span> (ammLow && ammHigh)</div>
|
||||
<div class="line"><a id="l02595" name="l02595"></a><span class="lineno"> 2595</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02596" name="l02596"></a><span class="lineno"> 2596</span> </div>
|
||||
<div class="line"><a id="l02597" name="l02597"></a><span class="lineno"> 2597</span> <span class="comment">// at least one must be</span></div>
|
||||
<div class="line"><a id="l02598" name="l02598"></a><span class="lineno"> 2598</span> <span class="keywordflow">if</span> (!ammLow && !ammHigh)</div>
|
||||
<div class="line"><a id="l02599" name="l02599"></a><span class="lineno"> 2599</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178">terNO_AMM</a>;</div>
|
||||
<div class="line"><a id="l02600" name="l02600"></a><span class="lineno"> 2600</span> </div>
|
||||
<div class="line"><a id="l02601" name="l02601"></a><span class="lineno"> 2601</span> <span class="comment">// one must be the target amm</span></div>
|
||||
<div class="line"><a id="l02602" name="l02602"></a><span class="lineno"> 2602</span> <span class="keywordflow">if</span> (ammAccountID && (low != *ammAccountID && high != *ammAccountID))</div>
|
||||
<div class="line"><a id="l02603" name="l02603"></a><span class="lineno"> 2603</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178">terNO_AMM</a>;</div>
|
||||
<div class="line"><a id="l02604" name="l02604"></a><span class="lineno"> 2604</span> </div>
|
||||
<div class="line"><a id="l02605" name="l02605"></a><span class="lineno"> 2605</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a> = <a class="code hl_function" href="namespaceripple.html#aa12dc40888e62814a55117d12ab2b454">trustDelete</a>(view, sleState, low, high, j);</div>
|
||||
<div class="line"><a id="l02606" name="l02606"></a><span class="lineno"> 2606</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a> != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
|
||||
<div class="line"><a id="l02607" name="l02607"></a><span class="lineno"> 2607</span> {</div>
|
||||
<div class="line"><a id="l02608" name="l02608"></a><span class="lineno"> 2608</span> JLOG(j.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
|
||||
<div class="line"><a id="l02609" name="l02609"></a><span class="lineno"> 2609</span> << <span class="stringliteral">"deleteAMMTrustLine: failed to delete the trustline."</span>;</div>
|
||||
<div class="line"><a id="l02610" name="l02610"></a><span class="lineno"> 2610</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>;</div>
|
||||
<div class="line"><a id="l02611" name="l02611"></a><span class="lineno"> 2611</span> }</div>
|
||||
<div class="line"><a id="l02612" name="l02612"></a><span class="lineno"> 2612</span> </div>
|
||||
<div class="line"><a id="l02613" name="l02613"></a><span class="lineno"> 2613</span> <span class="keyword">auto</span> <span class="keyword">const</span> uFlags = !ammLow ? <a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5ac704b653dce116dabb7ede80b711d953">lsfLowReserve</a> : <a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a753e9af2cd366aa69e76f62823acf9ec">lsfHighReserve</a>;</div>
|
||||
<div class="line"><a id="l02614" name="l02614"></a><span class="lineno"> 2614</span> <span class="keywordflow">if</span> (!(sleState->getFlags() & uFlags))</div>
|
||||
<div class="line"><a id="l02615" name="l02615"></a><span class="lineno"> 2615</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>;</div>
|
||||
<div class="line"><a id="l02616" name="l02616"></a><span class="lineno"> 2616</span> </div>
|
||||
<div class="line"><a id="l02617" name="l02617"></a><span class="lineno"> 2617</span> <a class="code hl_function" href="namespaceripple.html#a7e31af9d90dac8c9e4272bf597d83fb4">adjustOwnerCount</a>(view, !ammLow ? sleLow : sleHigh, -1, j);</div>
|
||||
<div class="line"><a id="l02618" name="l02618"></a><span class="lineno"> 2618</span> </div>
|
||||
<div class="line"><a id="l02619" name="l02619"></a><span class="lineno"> 2619</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
|
||||
<div class="line"><a id="l02620" name="l02620"></a><span class="lineno"> 2620</span>}</div>
|
||||
<div class="line"><a id="l02621" name="l02621"></a><span class="lineno"> 2621</span> </div>
|
||||
<div class="line"><a id="l02622" name="l02622"></a><span class="lineno"> 2622</span>TER</div>
|
||||
<div class="line"><a id="l02623" name="l02623"></a><span class="lineno"><a class="line" href="namespaceripple.html#adbbbf76f04d55cd69f1740ed38330719"> 2623</a></span><a class="code hl_function" href="namespaceripple.html#adbbbf76f04d55cd69f1740ed38330719">rippleCredit</a>(</div>
|
||||
<div class="line"><a id="l02624" name="l02624"></a><span class="lineno"> 2624</span> <a class="code hl_class" href="classripple_1_1ApplyView.html">ApplyView</a>& view,</div>
|
||||
<div class="line"><a id="l02625" name="l02625"></a><span class="lineno"> 2625</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& uSenderID,</div>
|
||||
<div class="line"><a id="l02626" name="l02626"></a><span class="lineno"> 2626</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& uReceiverID,</div>
|
||||
<div class="line"><a id="l02627" name="l02627"></a><span class="lineno"> 2627</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& saAmount,</div>
|
||||
<div class="line"><a id="l02628" name="l02628"></a><span class="lineno"> 2628</span> <span class="keywordtype">bool</span> bCheckIssuer,</div>
|
||||
<div class="line"><a id="l02629" name="l02629"></a><span class="lineno"> 2629</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j)</div>
|
||||
<div class="line"><a id="l02630" name="l02630"></a><span class="lineno"> 2630</span>{</div>
|
||||
<div class="line"><a id="l02631" name="l02631"></a><span class="lineno"> 2631</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/variant/visit.html">std::visit</a>(</div>
|
||||
<div class="line"><a id="l02632" name="l02632"></a><span class="lineno"> 2632</span> [&]<<a class="code hl_concept" href="conceptripple_1_1ValidIssueType.html">ValidIssueType</a> TIss>(TIss <span class="keyword">const</span>& issue) {</div>
|
||||
<div class="line"><a id="l02633" name="l02633"></a><span class="lineno"> 2633</span> <span class="keywordflow">if</span> <span class="keyword">constexpr</span> (std::is_same_v<TIss, Issue>)</div>
|
||||
<div class="line"><a id="l02634" name="l02634"></a><span class="lineno"> 2634</span> {</div>
|
||||
<div class="line"><a id="l02635" name="l02635"></a><span class="lineno"> 2635</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a852ced93804c9ac7625fd2181db028f4">rippleCreditIOU</a>(</div>
|
||||
<div class="line"><a id="l02636" name="l02636"></a><span class="lineno"> 2636</span> view, uSenderID, uReceiverID, saAmount, bCheckIssuer, j);</div>
|
||||
<div class="line"><a id="l02637" name="l02637"></a><span class="lineno"> 2637</span> }</div>
|
||||
<div class="line"><a id="l02638" name="l02638"></a><span class="lineno"> 2638</span> <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a id="l02639" name="l02639"></a><span class="lineno"> 2639</span> {</div>
|
||||
<div class="line"><a id="l02640" name="l02640"></a><span class="lineno"> 2640</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02641" name="l02641"></a><span class="lineno"> 2641</span> !bCheckIssuer,</div>
|
||||
<div class="line"><a id="l02642" name="l02642"></a><span class="lineno"> 2642</span> <span class="stringliteral">"ripple::rippleCredit : not checking issuer"</span>);</div>
|
||||
<div class="line"><a id="l02643" name="l02643"></a><span class="lineno"> 2643</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#aee8453eabd14a72ee8c99afd9543f4ff">rippleCreditMPT</a>(</div>
|
||||
<div class="line"><a id="l02644" name="l02644"></a><span class="lineno"> 2644</span> view, uSenderID, uReceiverID, saAmount, j);</div>
|
||||
<div class="line"><a id="l02645" name="l02645"></a><span class="lineno"> 2645</span> }</div>
|
||||
<div class="line"><a id="l02646" name="l02646"></a><span class="lineno"> 2646</span> },</div>
|
||||
<div class="line"><a id="l02647" name="l02647"></a><span class="lineno"> 2647</span> saAmount.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>().<a class="code hl_function" href="classripple_1_1Asset.html#aa57a6038f59dbd5dd7b31cd18bf0ab95">value</a>());</div>
|
||||
<div class="line"><a id="l02648" name="l02648"></a><span class="lineno"> 2648</span>}</div>
|
||||
<div class="line"><a id="l02649" name="l02649"></a><span class="lineno"> 2649</span> </div>
|
||||
<div class="line"><a id="l02650" name="l02650"></a><span class="lineno"> 2650</span>[[nodiscard]] STAmount</div>
|
||||
<div class="line"><a id="l02651" name="l02651"></a><span class="lineno"><a class="line" href="namespaceripple.html#ad4f860310e3dfc97345c3b673f7cd5d7"> 2651</a></span><a class="code hl_function" href="namespaceripple.html#ad4f860310e3dfc97345c3b673f7cd5d7">assetsToSharesDeposit</a>(</div>
|
||||
<div class="line"><a id="l02652" name="l02652"></a><span class="lineno"> 2652</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& vault,</div>
|
||||
<div class="line"><a id="l02653" name="l02653"></a><span class="lineno"> 2653</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& issuance,</div>
|
||||
<div class="line"><a id="l02654" name="l02654"></a><span class="lineno"> 2654</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& assets)</div>
|
||||
<div class="line"><a id="l02655" name="l02655"></a><span class="lineno"> 2655</span>{</div>
|
||||
<div class="line"><a id="l02656" name="l02656"></a><span class="lineno"> 2656</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02657" name="l02657"></a><span class="lineno"> 2657</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault->at(sfAsset),</div>
|
||||
<div class="line"><a id="l02658" name="l02658"></a><span class="lineno"> 2658</span> <span class="stringliteral">"ripple::assetsToSharesDeposit : assets and vault match"</span>);</div>
|
||||
<div class="line"><a id="l02659" name="l02659"></a><span class="lineno"> 2659</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault->at(sfAssetsTotal);</div>
|
||||
<div class="line"><a id="l02660" name="l02660"></a><span class="lineno"> 2660</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> shares{vault->at(sfShareMPTID), <span class="keyword">static_cast<</span><a class="code hl_class" href="classripple_1_1Number.html">Number</a><span class="keyword">></span>(assets)};</div>
|
||||
<div class="line"><a id="l02661" name="l02661"></a><span class="lineno"> 2661</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
|
||||
<div class="line"><a id="l02662" name="l02662"></a><span class="lineno"> 2662</span> <span class="keywordflow">return</span> shares;</div>
|
||||
<div class="line"><a id="l02663" name="l02663"></a><span class="lineno"> 2663</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance->at(sfOutstandingAmount);</div>
|
||||
<div class="line"><a id="l02664" name="l02664"></a><span class="lineno"> 2664</span> shares = shareTotal * (assets / assetTotal);</div>
|
||||
<div class="line"><a id="l02665" name="l02665"></a><span class="lineno"> 2665</span> <span class="keywordflow">return</span> shares;</div>
|
||||
<div class="line"><a id="l02666" name="l02666"></a><span class="lineno"> 2666</span>}</div>
|
||||
<div class="line"><a id="l02667" name="l02667"></a><span class="lineno"> 2667</span> </div>
|
||||
<div class="line"><a id="l02668" name="l02668"></a><span class="lineno"> 2668</span>[[nodiscard]] STAmount</div>
|
||||
<div class="line"><a id="l02669" name="l02669"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac527f4be8f38f42794ec9a8981c71f25"> 2669</a></span><a class="code hl_function" href="namespaceripple.html#ac527f4be8f38f42794ec9a8981c71f25">assetsToSharesWithdraw</a>(</div>
|
||||
<div class="line"><a id="l02670" name="l02670"></a><span class="lineno"> 2670</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& vault,</div>
|
||||
<div class="line"><a id="l02671" name="l02671"></a><span class="lineno"> 2671</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& issuance,</div>
|
||||
<div class="line"><a id="l02672" name="l02672"></a><span class="lineno"> 2672</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& assets)</div>
|
||||
<div class="line"><a id="l02673" name="l02673"></a><span class="lineno"> 2673</span>{</div>
|
||||
<div class="line"><a id="l02674" name="l02674"></a><span class="lineno"> 2674</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02675" name="l02675"></a><span class="lineno"> 2675</span> assets.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault->at(sfAsset),</div>
|
||||
<div class="line"><a id="l02676" name="l02676"></a><span class="lineno"> 2676</span> <span class="stringliteral">"ripple::assetsToSharesWithdraw : assets and vault match"</span>);</div>
|
||||
<div class="line"><a id="l02677" name="l02677"></a><span class="lineno"> 2677</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault->at(sfAssetsTotal);</div>
|
||||
<div class="line"><a id="l02678" name="l02678"></a><span class="lineno"> 2678</span> assetTotal -= vault->at(sfLossUnrealized);</div>
|
||||
<div class="line"><a id="l02679" name="l02679"></a><span class="lineno"> 2679</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> shares{vault->at(sfShareMPTID)};</div>
|
||||
<div class="line"><a id="l02680" name="l02680"></a><span class="lineno"> 2680</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
|
||||
<div class="line"><a id="l02681" name="l02681"></a><span class="lineno"> 2681</span> <span class="keywordflow">return</span> shares;</div>
|
||||
<div class="line"><a id="l02682" name="l02682"></a><span class="lineno"> 2682</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance->at(sfOutstandingAmount);</div>
|
||||
<div class="line"><a id="l02683" name="l02683"></a><span class="lineno"> 2683</span> shares = shareTotal * (assets / assetTotal);</div>
|
||||
<div class="line"><a id="l02684" name="l02684"></a><span class="lineno"> 2684</span> <span class="keywordflow">return</span> shares;</div>
|
||||
<div class="line"><a id="l02685" name="l02685"></a><span class="lineno"> 2685</span>}</div>
|
||||
<div class="line"><a id="l02686" name="l02686"></a><span class="lineno"> 2686</span> </div>
|
||||
<div class="line"><a id="l02687" name="l02687"></a><span class="lineno"> 2687</span>[[nodiscard]] STAmount</div>
|
||||
<div class="line"><a id="l02688" name="l02688"></a><span class="lineno"><a class="line" href="namespaceripple.html#a2538e2190b6fa5b9b2f10e74f64c905c"> 2688</a></span><a class="code hl_function" href="namespaceripple.html#a2538e2190b6fa5b9b2f10e74f64c905c">sharesToAssetsWithdraw</a>(</div>
|
||||
<div class="line"><a id="l02689" name="l02689"></a><span class="lineno"> 2689</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& vault,</div>
|
||||
<div class="line"><a id="l02690" name="l02690"></a><span class="lineno"> 2690</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> <span class="keyword">const</span>& issuance,</div>
|
||||
<div class="line"><a id="l02691" name="l02691"></a><span class="lineno"> 2691</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& shares)</div>
|
||||
<div class="line"><a id="l02692" name="l02692"></a><span class="lineno"> 2692</span>{</div>
|
||||
<div class="line"><a id="l02693" name="l02693"></a><span class="lineno"> 2693</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l02694" name="l02694"></a><span class="lineno"> 2694</span> shares.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>() == vault->at(sfShareMPTID),</div>
|
||||
<div class="line"><a id="l02695" name="l02695"></a><span class="lineno"> 2695</span> <span class="stringliteral">"ripple::sharesToAssetsWithdraw : shares and vault match"</span>);</div>
|
||||
<div class="line"><a id="l02696" name="l02696"></a><span class="lineno"> 2696</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> assetTotal = vault->at(sfAssetsTotal);</div>
|
||||
<div class="line"><a id="l02697" name="l02697"></a><span class="lineno"> 2697</span> assetTotal -= vault->at(sfLossUnrealized);</div>
|
||||
<div class="line"><a id="l02698" name="l02698"></a><span class="lineno"> 2698</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> assets{vault->at(sfAsset)};</div>
|
||||
<div class="line"><a id="l02699" name="l02699"></a><span class="lineno"> 2699</span> <span class="keywordflow">if</span> (assetTotal == 0)</div>
|
||||
<div class="line"><a id="l02700" name="l02700"></a><span class="lineno"> 2700</span> <span class="keywordflow">return</span> assets;</div>
|
||||
<div class="line"><a id="l02701" name="l02701"></a><span class="lineno"> 2701</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> shareTotal = issuance->at(sfOutstandingAmount);</div>
|
||||
<div class="line"><a id="l02702" name="l02702"></a><span class="lineno"> 2702</span> assets = assetTotal * (shares / shareTotal);</div>
|
||||
<div class="line"><a id="l02703" name="l02703"></a><span class="lineno"> 2703</span> <span class="keywordflow">return</span> assets;</div>
|
||||
<div class="line"><a id="l02704" name="l02704"></a><span class="lineno"> 2704</span>}</div>
|
||||
<div class="line"><a id="l02705" name="l02705"></a><span class="lineno"> 2705</span> </div>
|
||||
<div class="line"><a id="l02706" name="l02706"></a><span class="lineno"> 2706</span><span class="keywordtype">bool</span></div>
|
||||
<div class="line"><a id="l02707" name="l02707"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac3e90afb749bb1f01e06729c7c860ba3"> 2707</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="l02708" name="l02708"></a><span class="lineno"> 2708</span>{</div>
|
||||
<div class="line"><a id="l02709" name="l02709"></a><span class="lineno"> 2709</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() > mark;</div>
|
||||
<div class="line"><a id="l02710" name="l02710"></a><span class="lineno"> 2710</span>}</div>
|
||||
<div class="line"><a id="l02711" name="l02711"></a><span class="lineno"> 2711</span> </div>
|
||||
<div class="line"><a id="l02712" name="l02712"></a><span class="lineno"> 2712</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>
|
||||
@@ -2884,10 +2895,10 @@ $(function() {
|
||||
<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 &view, uint256 const &root, std::shared_ptr< SLE const > &page, unsigned int &index, uint256 &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#l00148">View.cpp:148</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 &c)</div><div class="ttdef"><b>Definition:</b> <a href="AccountID_8h_source.html#l00091">AccountID.h:91</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 & 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< SLE const > const &vault, std::shared_ptr< SLE const > const &issuance, STAmount const &shares)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02677">View.cpp:2677</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< SLE const > const &vault, std::shared_ptr< SLE const > const &issuance, STAmount const &shares)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02688">View.cpp:2688</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_a29c200b51e582524768ea6a9f3d9b279"><div class="ttname"><a href="namespaceripple.html#a29c200b51e582524768ea6a9f3d9b279">ripple::isIndividualFrozen</a></div><div class="ttdeci">bool isIndividualFrozen(ReadView const &view, AccountID const &account, Currency const &currency, AccountID const &issuer)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00216">View.cpp:216</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 &view, std::shared_ptr< SLE > sleState, std::optional< AccountID > const &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#l02563">View.cpp:2563</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 &view, std::shared_ptr< SLE > sleState, std::optional< AccountID > const &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#l02574">View.cpp:2574</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 &view, AccountID const &uSenderID, AccountID const &uReceiverID, STAmount const &saAmount, STAmount &saActual, beast::Journal j, WaiveTransferFee waiveFee)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l01887">View.cpp:1887</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a34251c908a52d50d055160c19d6e6e56"><div class="ttname"><a href="namespaceripple.html#a34251c908a52d50d055160c19d6e6e56">ripple::dirFirst</a></div><div class="ttdeci">bool dirFirst(ApplyView &view, uint256 const &root, std::shared_ptr< SLE > &page, unsigned int &index, uint256 &entry)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00126">View.cpp:126</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a3a022ec9e19a1b18a0ac3bdf7328a877"><div class="ttname"><a href="namespaceripple.html#a3a022ec9e19a1b18a0ac3bdf7328a877">ripple::dirNext</a></div><div class="ttdeci">bool dirNext(ApplyView &view, uint256 const &root, std::shared_ptr< SLE > &page, unsigned int &index, uint256 &entry)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00137">View.cpp:137</a></div></div>
|
||||
@@ -2926,8 +2937,9 @@ $(function() {
|
||||
<div class="ttc" id="anamespaceripple_html_a6434c1a0fd22b77e2e4a228c0eca79eba43b5c9175984c071f30b873fdce0a000"><div class="ttname"><a href="namespaceripple.html#a6434c1a0fd22b77e2e4a228c0eca79eba43b5c9175984c071f30b873fdce0a000">ripple::ValStatus::current</a></div><div class="ttdeci">@ current</div><div class="ttdoc">This was a new validation and was added.</div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a66af773abebf361a8c930c1dc457a740"><div class="ttname"><a href="namespaceripple.html#a66af773abebf361a8c930c1dc457a740">ripple::offerDelete</a></div><div class="ttdeci">TER offerDelete(ApplyView &view, std::shared_ptr< SLE > const &sle, beast::Journal j)</div><div class="ttdoc">Delete an offer.</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l01459">View.cpp:1459</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a6cb89b79bc073abda42953c323d36cda"><div class="ttname"><a href="namespaceripple.html#a6cb89b79bc073abda42953c323d36cda">ripple::isFrozen</a></div><div class="ttdeci">bool isFrozen(ReadView const &view, AccountID const &account, Currency const &currency, AccountID const &issuer)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00250">View.cpp:250</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a6eaff79c38106bc3b27326d878c902d3ac4bfb2a0bab0e91bc7dcfbe3bbec246e"><div class="ttname"><a href="namespaceripple.html#a6eaff79c38106bc3b27326d878c902d3ac4bfb2a0bab0e91bc7dcfbe3bbec246e">ripple::ListDisposition::expired</a></div><div class="ttdeci">@ expired</div><div class="ttdoc">List is expired, but has the largest non-pending sequence seen so far.</div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a6f8b0cab74710c17299c1d37f3e05b48"><div class="ttname"><a href="namespaceripple.html#a6f8b0cab74710c17299c1d37f3e05b48">ripple::getEnabledAmendments</a></div><div class="ttdeci">std::set< uint256 > getEnabledAmendments(ReadView const &view)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00908">View.cpp:908</a></div></div>
|
||||
<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 &view, MPTIssue const &mptIssue, AccountID const &from, AccountID const &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#l02465">View.cpp:2465</a></div></div>
|
||||
<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 &view, MPTIssue const &mptIssue, AccountID const &from, AccountID const &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#l02476">View.cpp:2476</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_a7e31af9d90dac8c9e4272bf597d83fb4"><div class="ttname"><a href="namespaceripple.html#a7e31af9d90dac8c9e4272bf597d83fb4">ripple::adjustOwnerCount</a></div><div class="ttdeci">void adjustOwnerCount(ApplyView &view, std::shared_ptr< SLE > const &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#l01019">View.cpp:1019</a></div></div>
|
||||
@@ -2955,6 +2967,7 @@ $(function() {
|
||||
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38cac480d742e7760c48047bb3ccc50a40ef"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac480d742e7760c48047bb3ccc50a40ef">ripple::tecNO_LINE</a></div><div class="ttdeci">@ tecNO_LINE</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00301">TER.h:301</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38cad7c0f4891446922b7248ed12f2207a57"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cad7c0f4891446922b7248ed12f2207a57">ripple::tecPATH_DRY</a></div><div class="ttdeci">@ tecPATH_DRY</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00294">TER.h:294</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38caecd11145ac07375d1c0793e699932969"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caecd11145ac07375d1c0793e699932969">ripple::tecFAILED_PROCESSING</a></div><div class="ttdeci">@ tecFAILED_PROCESSING</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00286">TER.h:286</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">ripple::tecEXPIRED</a></div><div class="ttdeci">@ tecEXPIRED</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00314">TER.h:314</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caf5820ac855eaa9dfcd635cd411019a31">ripple::tecNO_AUTH</a></div><div class="ttdeci">@ tecNO_AUTH</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00300">TER.h:300</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151"><div class="ttname"><a href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">ripple::tesSUCCESS</a></div><div class="ttdeci">@ tesSUCCESS</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00245">TER.h:244</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aad416c46e7b4259fc8caf88cf8dc6ad5"><div class="ttname"><a href="namespaceripple.html#aad416c46e7b4259fc8caf88cf8dc6ad5">ripple::addEmptyHolding</a></div><div class="ttdeci">TER addEmptyHolding(ApplyView &view, AccountID const &accountID, XRPAmount priorBalance, Issue const &issue, beast::Journal journal)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l01142">View.cpp:1142</a></div></div>
|
||||
@@ -2969,16 +2982,16 @@ $(function() {
|
||||
<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 &view, Keylet const &root, uint256 const &after, std::uint64_t const hint, unsigned int limit, std::function< bool(std::shared_ptr< SLE const > const &)> const &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#l00684">View.cpp:684</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_ac257f40046c4e897b1109124734c7026"><div class="ttname"><a href="namespaceripple.html#ac257f40046c4e897b1109124734c7026">ripple::MPTAuthType</a></div><div class="ttdeci">MPTAuthType</div><div class="ttdef"><b>Definition:</b> <a href="View_8h_source.html#l00710">View.h:710</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_ac257f40046c4e897b1109124734c7026a7559328fba92acce7308a39180e16441"><div class="ttname"><a href="namespaceripple.html#ac257f40046c4e897b1109124734c7026a7559328fba92acce7308a39180e16441">ripple::MPTAuthType::StrongAuth</a></div><div class="ttdeci">@ StrongAuth</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#l02696">View.cpp:2696</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< SLE const > const &vault, std::shared_ptr< SLE const > const &issuance, STAmount const &assets)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02658">View.cpp:2658</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 &view, Keylet const &ownerDirKeylet, EntryDeleter const &deleter, beast::Journal j, std::optional< uint16_t > maxNodesToDelete)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02485">View.cpp:2485</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#l02707">View.cpp:2707</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< SLE const > const &vault, std::shared_ptr< SLE const > const &issuance, STAmount const &assets)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02669">View.cpp:2669</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 &view, Keylet const &ownerDirKeylet, EntryDeleter const &deleter, beast::Journal j, std::optional< uint16_t > maxNodesToDelete)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02496">View.cpp:2496</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 &view, Keylet const &root, std::function< void(std::shared_ptr< SLE const > const &)> const &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#l00656">View.cpp:656</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 &view, AccountID const &account, uint256 domainID, beast::Journal j)</div><div class="ttdef"><b>Definition:</b> <a href="CredentialHelpers_8cpp_source.html#l00316">CredentialHelpers.cpp:316</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< SLE const > const &vault, std::shared_ptr< SLE const > const &issuance, STAmount const &assets)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02640">View.cpp:2640</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< SLE const > const &vault, std::shared_ptr< SLE const > const &issuance, STAmount const &assets)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02651">View.cpp:2651</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 &view, std::optional< std::uint32_t > const &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#l00176">View.cpp:176</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 &view, AccountID const &uSenderID, AccountID const &uReceiverID, STAmount const &saAmount, STAmount &saActual, beast::Journal j, WaiveTransferFee waiveFee)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l01653">View.cpp:1653</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 &view, AccountID const &uSenderID, AccountID const &uReceiverID, STAmount const &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#l02612">View.cpp:2612</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 &view, AccountID const &uSenderID, AccountID const &uReceiverID, STAmount const &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#l02623">View.cpp:2623</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_adcd50578d9c82873a5d3a3f00b06899c"><div class="ttname"><a href="namespaceripple.html#adcd50578d9c82873a5d3a3f00b06899c">ripple::isAnyFrozen</a></div><div class="ttdeci">bool isAnyFrozen(ReadView const &view, std::initializer_list< AccountID > const &accounts, MPTIssue const &mptIssue, int depth)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00285">View.cpp:285</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178"><div class="ttname"><a href="namespaceripple.html#adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178">ripple::terNO_AMM</a></div><div class="ttdeci">@ terNO_AMM</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00227">TER.h:227</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_adfb760bc3e4ccb79d5d4f6ecff2f1817"><div class="ttname"><a href="namespaceripple.html#adfb760bc3e4ccb79d5d4f6ecff2f1817">ripple::TER</a></div><div class="ttdeci">TERSubset< CanCvtToTER > TER</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00643">TER.h:643</a></div></div>
|
||||
|
||||
Reference in New Issue
Block a user