This commit is contained in:
bthomee
2025-10-31 13:27:59 -07:00
parent 643d441c70
commit a1e231d9da
16 changed files with 1607 additions and 1702 deletions

View File

@@ -573,495 +573,481 @@ $(document).ready(function() { init_codefold(0); });
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <span class="comment">// what is a good threshold to check?</span></div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> afterCross.in.<a class="code hl_function" href="classripple_1_1STAmount.html#ae1e71aef94d7a8d5730eb85804b710da">clear</a>();</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> </div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> afterCross.out = [&amp;]() {</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <span class="comment">// Careful analysis showed that rounding up this</span></div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <span class="comment">// divRound result could lead to placing a reduced</span></div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <span class="comment">// offer in the ledger that blocks order books. So</span></div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="comment">// the fixReducedOffersV1 amendment changes the</span></div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <span class="comment">// behavior to round down instead.</span></div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">if</span> (psb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#af16244cf2efd903b4575a0b85c94d159">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixReducedOffersV1))</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a367db2ac1e6b2c03763f8e43afa3db44">divRoundStrict</a>(</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> afterCross.in,</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> rate,</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> takerAmount.out.issue(),</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <span class="keyword">false</span>);</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> </div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#abc53dd05ffa8024fbe0101790a2b78ac">divRound</a>(</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> afterCross.in, rate, takerAmount.out.issue(), <span class="keyword">true</span>);</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> }();</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> afterCross.out = <a class="code hl_function" href="namespaceripple.html#a367db2ac1e6b2c03763f8e43afa3db44">divRoundStrict</a>(</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> afterCross.in, rate, takerAmount.out.issue(), <span class="keyword">false</span>);</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> }</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> {</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <span class="comment">// If not selling, we scale the input based on the</span></div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="comment">// remaining output. This too preserves the offer</span></div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="comment">// Quality.</span></div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> afterCross.out -= result.actualAmountOut;</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> afterCross.out &gt;= beast::zero,</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <span class="stringliteral">&quot;ripple::CreateOffer::flowCross : minimum offer&quot;</span>);</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">if</span> (afterCross.out &lt; beast::zero)</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> afterCross.out.clear();</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> afterCross.in = <a class="code hl_function" href="namespaceripple.html#ac96824de7714986a7122e5551a2ba470">mulRound</a>(</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> afterCross.out, rate, takerAmount.in.issue(), <span class="keyword">true</span>);</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> }</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> {</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="comment">// If not selling, we scale the input based on the</span></div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="comment">// remaining output. This too preserves the offer</span></div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="comment">// Quality.</span></div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> afterCross.out -= result.actualAmountOut;</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> afterCross.out &gt;= beast::zero,</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="stringliteral">&quot;ripple::CreateOffer::flowCross : minimum offer&quot;</span>);</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">if</span> (afterCross.out &lt; beast::zero)</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> afterCross.out.clear();</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> afterCross.in = <a class="code hl_function" href="namespaceripple.html#ac96824de7714986a7122e5551a2ba470">mulRound</a>(</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> afterCross.out, rate, takerAmount.in.issue(), <span class="keyword">true</span>);</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> }</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> }</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> }</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> </div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="comment">// Return how much of the offer is left.</span></div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>, afterCross};</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> }</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> {</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;Exception during offer crossing: &quot;</span> &lt;&lt; e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> }</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>, takerAmount};</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span>}</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> }</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> }</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> </div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="comment">// Return how much of the offer is left.</span></div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>, afterCross};</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> }</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> {</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>()) &lt;&lt; <span class="stringliteral">&quot;Exception during offer crossing: &quot;</span> &lt;&lt; e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> }</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>, takerAmount};</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span>}</div>
</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> </div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div>
<div class="foldopen" id="foldopen00525" data-start="{" data-end="}">
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"><a class="line" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264"> 525</a></span><a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">CreateOffer::format_amount</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount)</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span>{</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> txt = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#aa65826cb148b5d15412fceecca5ae47c">getText</a>();</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> txt += <span class="stringliteral">&quot;/&quot;</span>;</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> txt += <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(amount.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>);</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">return</span> txt;</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span>}</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> </div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div>
<div class="foldopen" id="foldopen00511" data-start="{" data-end="}">
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"><a class="line" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264"> 511</a></span><a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">CreateOffer::format_amount</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount)</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span>{</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> txt = amount.<a class="code hl_function" href="classripple_1_1STAmount.html#aa65826cb148b5d15412fceecca5ae47c">getText</a>();</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> txt += <span class="stringliteral">&quot;/&quot;</span>;</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> txt += <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(amount.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>);</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">return</span> txt;</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span>}</div>
</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> </div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span><a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a></div>
<div class="foldopen" id="foldopen00534" data-start="{" data-end="}">
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"><a class="line" href="classripple_1_1CreateOffer.html#ab9e0f2e14fa541676412a148b4823f4c"> 534</a></span><a class="code hl_function" href="classripple_1_1CreateOffer.html#ab9e0f2e14fa541676412a148b4823f4c">CreateOffer::applyHybrid</a>(</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; sb,</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;STLedgerEntry&gt;</a> sleOffer,</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <a class="code hl_struct" href="structripple_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; offerKey,</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; saTakerPays,</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; saTakerGets,</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<span class="keywordtype">void</span>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">SLE::ref</a>, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;uint256&gt;</a>)&gt; <span class="keyword">const</span>&amp; setDir)</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span>{</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">if</span> (!sleOffer-&gt;isFieldPresent(sfDomainID))</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> </div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <span class="comment">// set hybrid flag</span></div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> sleOffer-&gt;setFlag(<a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a9f6346dbd49b85ced4658b24df239b68">lsfHybrid</a>);</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> </div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="comment">// if offer is hybrid, need to also place into open offer dir</span></div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <a class="code hl_class" href="classripple_1_1Book.html">Book</a> <span class="keyword">const</span> book{saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>};</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> </div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keyword">auto</span> dir =</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <a class="code hl_function" href="namespaceripple_1_1keylet.html#a0a100bd2f819f22d2ef41ed7d83a9192">keylet::quality</a>(<a class="code hl_variable" href="namespaceripple_1_1keylet.html#a5dc4ad00b59a4e63406dab067f0fe021">keylet::book</a>(book), <a class="code hl_function" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">getRate</a>(saTakerGets, saTakerPays));</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bookExists = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#ab5b90b656223e19272dfe10e2dcd7f56">exists</a>(dir);</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> </div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="keyword">auto</span> <span class="keyword">const</span> bookNode = sb.<a class="code hl_function" href="classripple_1_1ApplyView.html#a6dc52893f14495b06de08265f6e1e45a">dirAppend</a>(dir, offerKey, [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">SLE::ref</a> sle) {</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="comment">// don&#39;t set domainID on the directory object since this directory is</span></div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> <span class="comment">// for open book</span></div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> setDir(sle, <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>);</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> });</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> </div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">if</span> (!bookNode)</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> {</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>())</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> &lt;&lt; <span class="stringliteral">&quot;final result: failed to add hybrid offer to open book&quot;</span>;</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca4f19fdbc12c26412215f3477f70d5feb">tecDIR_FULL</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> }</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> </div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <a class="code hl_class" href="classripple_1_1STArray.html">STArray</a> bookArr(sfAdditionalBooks, 1);</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keyword">auto</span> bookInfo = <a class="code hl_function" href="classripple_1_1STObject.html#ab027b1e13d78b76dd6f41f0fb3459792">STObject::makeInnerObject</a>(sfBook);</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> bookInfo.setFieldH256(sfBookDirectory, dir.key);</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> bookInfo.setFieldU64(sfBookNode, *bookNode);</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> bookArr.<a class="code hl_function" href="classripple_1_1STArray.html#adc3dc750320964c46b6d4ea2af8b8bc7">push_back</a>(std::move(bookInfo));</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> </div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span><a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a></div>
<div class="foldopen" id="foldopen00520" data-start="{" data-end="}">
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"><a class="line" href="classripple_1_1CreateOffer.html#ab9e0f2e14fa541676412a148b4823f4c"> 520</a></span><a class="code hl_function" href="classripple_1_1CreateOffer.html#ab9e0f2e14fa541676412a148b4823f4c">CreateOffer::applyHybrid</a>(</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; sb,</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;STLedgerEntry&gt;</a> sleOffer,</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <a class="code hl_struct" href="structripple_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; offerKey,</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; saTakerPays,</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; saTakerGets,</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<span class="keywordtype">void</span>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">SLE::ref</a>, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;uint256&gt;</a>)&gt; <span class="keyword">const</span>&amp; setDir)</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span>{</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">if</span> (!sleOffer-&gt;isFieldPresent(sfDomainID))</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> </div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="comment">// set hybrid flag</span></div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> sleOffer-&gt;setFlag(<a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a9f6346dbd49b85ced4658b24df239b68">lsfHybrid</a>);</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> </div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="comment">// if offer is hybrid, need to also place into open offer dir</span></div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <a class="code hl_class" href="classripple_1_1Book.html">Book</a> <span class="keyword">const</span> book{saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>};</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> </div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <span class="keyword">auto</span> dir =</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <a class="code hl_function" href="namespaceripple_1_1keylet.html#a0a100bd2f819f22d2ef41ed7d83a9192">keylet::quality</a>(<a class="code hl_variable" href="namespaceripple_1_1keylet.html#a5dc4ad00b59a4e63406dab067f0fe021">keylet::book</a>(book), <a class="code hl_function" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">getRate</a>(saTakerGets, saTakerPays));</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bookExists = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#ab5b90b656223e19272dfe10e2dcd7f56">exists</a>(dir);</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> </div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="keyword">auto</span> <span class="keyword">const</span> bookNode = sb.<a class="code hl_function" href="classripple_1_1ApplyView.html#a6dc52893f14495b06de08265f6e1e45a">dirAppend</a>(dir, offerKey, [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">SLE::ref</a> sle) {</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="comment">// don&#39;t set domainID on the directory object since this directory is</span></div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="comment">// for open book</span></div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> setDir(sle, <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>);</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> });</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> </div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">if</span> (!bookNode)</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> {</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>())</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> &lt;&lt; <span class="stringliteral">&quot;final result: failed to add hybrid offer to open book&quot;</span>;</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca4f19fdbc12c26412215f3477f70d5feb">tecDIR_FULL</a>; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> }</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> </div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <a class="code hl_class" href="classripple_1_1STArray.html">STArray</a> bookArr(sfAdditionalBooks, 1);</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="keyword">auto</span> bookInfo = <a class="code hl_function" href="classripple_1_1STObject.html#ab027b1e13d78b76dd6f41f0fb3459792">STObject::makeInnerObject</a>(sfBook);</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> bookInfo.setFieldH256(sfBookDirectory, dir.key);</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> bookInfo.setFieldU64(sfBookNode, *bookNode);</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> bookArr.<a class="code hl_function" href="classripple_1_1STArray.html#adc3dc750320964c46b6d4ea2af8b8bc7">push_back</a>(std::move(bookInfo));</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> </div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">if</span> (!bookExists)</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a6ec1f10e560afe30ed435c3f7eea715d">app</a>.<a class="code hl_function" href="classripple_1_1Application.html#a477219b05fb65f86a6dee712bf778280">getOrderBookDB</a>().<a class="code hl_function" href="classripple_1_1OrderBookDB.html#a0faba63ac03924d89a07b2dd69bcd206">addOrderBook</a>(book);</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> sleOffer-&gt;setFieldArray(sfAdditionalBooks, bookArr);</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span>}</div>
</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> </div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, bool&gt;</a></div>
<div class="foldopen" id="foldopen00568" data-start="{" data-end="}">
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"><a class="line" href="classripple_1_1CreateOffer.html#af1e3edb1dcc853bf59a5c63f366f29e9"> 568</a></span><a class="code hl_function" href="classripple_1_1CreateOffer.html#af1e3edb1dcc853bf59a5c63f366f29e9">CreateOffer::applyGuts</a>(<a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; sb, <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; sbCancel)</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span>{</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keyword">using </span>beast::zero;</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> </div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <span class="keyword">const</span> uTxFlags = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>.<a class="code hl_function" href="classripple_1_1STObject.html#af5aa57043ec772da30341e3c3b823d7f">getFlags</a>();</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> </div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">if</span> (!bookExists)</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a6ec1f10e560afe30ed435c3f7eea715d">app</a>.<a class="code hl_function" href="classripple_1_1Application.html#a477219b05fb65f86a6dee712bf778280">getOrderBookDB</a>().<a class="code hl_function" href="classripple_1_1OrderBookDB.html#a0faba63ac03924d89a07b2dd69bcd206">addOrderBook</a>(book);</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> </div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> sleOffer-&gt;setFieldArray(sfAdditionalBooks, bookArr);</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span>}</div>
</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> </div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, bool&gt;</a></div>
<div class="foldopen" id="foldopen00582" data-start="{" data-end="}">
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"><a class="line" href="classripple_1_1CreateOffer.html#af1e3edb1dcc853bf59a5c63f366f29e9"> 582</a></span><a class="code hl_function" href="classripple_1_1CreateOffer.html#af1e3edb1dcc853bf59a5c63f366f29e9">CreateOffer::applyGuts</a>(<a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; sb, <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; sbCancel)</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span>{</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <span class="keyword">using </span>beast::zero;</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bPassive(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#a61d9fbb44b335fbb5e82e3211e6639a2">tfPassive</a>);</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bImmediateOrCancel(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#a6257d0a91b5b06dd7712c68af628441d">tfImmediateOrCancel</a>);</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bFillOrKill(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#a5bdaf22398ee3e51d3c2c3c694f917ec">tfFillOrKill</a>);</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bSell(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#ad3bc01fc1c4e0e3191802ff3192c5493">tfSell</a>);</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bHybrid(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#a5728c62eac2f5903f9f55bf72cf29428">tfHybrid</a>);</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> </div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <span class="keyword">auto</span> saTakerPays = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[sfTakerPays];</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keyword">auto</span> saTakerGets = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[sfTakerGets];</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> <span class="keyword">auto</span> <span class="keyword">const</span> domainID = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[~sfDomainID];</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> </div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <span class="keyword">auto</span> <span class="keyword">const</span> cancelSequence = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[~sfOfferSequence];</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> </div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <span class="keyword">const</span> uTxFlags = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>.<a class="code hl_function" href="classripple_1_1STObject.html#af5aa57043ec772da30341e3c3b823d7f">getFlags</a>();</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> </div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bPassive(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#a61d9fbb44b335fbb5e82e3211e6639a2">tfPassive</a>);</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bImmediateOrCancel(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#a6257d0a91b5b06dd7712c68af628441d">tfImmediateOrCancel</a>);</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bFillOrKill(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#a5bdaf22398ee3e51d3c2c3c694f917ec">tfFillOrKill</a>);</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bSell(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#ad3bc01fc1c4e0e3191802ff3192c5493">tfSell</a>);</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bHybrid(uTxFlags &amp; <a class="code hl_variable" href="namespaceripple.html#a5728c62eac2f5903f9f55bf72cf29428">tfHybrid</a>);</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keyword">auto</span> saTakerPays = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[sfTakerPays];</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="keyword">auto</span> saTakerGets = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[sfTakerGets];</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="keyword">auto</span> <span class="keyword">const</span> domainID = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[~sfDomainID];</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> </div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="keyword">auto</span> <span class="keyword">const</span> cancelSequence = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[~sfOfferSequence];</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> </div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="comment">// Note that we we use the value from the sequence or ticket as the</span></div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="comment">// offer sequence. For more explanation see comments in SeqProxy.h.</span></div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="keyword">auto</span> <span class="keyword">const</span> offerSequence = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>.<a class="code hl_function" href="classripple_1_1STTx.html#ab560bf669b9e15d7cfb91bb9da4a104a">getSeqValue</a>();</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> </div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> <span class="comment">// This is the original rate of the offer, and is the rate at which</span></div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="comment">// it will be placed, even if crossing offers change the amounts that</span></div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="comment">// end up on the books.</span></div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keyword">auto</span> uRate = <a class="code hl_function" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">getRate</a>(saTakerGets, saTakerPays);</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> </div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> <span class="keyword">auto</span> viewJ = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a6ec1f10e560afe30ed435c3f7eea715d">app</a>.<a class="code hl_function" href="classripple_1_1Application.html#a2897c28a5b5040e80e66f676d201d03f">journal</a>(<span class="stringliteral">&quot;View&quot;</span>);</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> </div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> result = <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> </div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="comment">// Process a cancellation request that&#39;s passed along with an offer.</span></div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordflow">if</span> (cancelSequence)</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> {</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleCancel =</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#afe88196d7aec85f2af00d7cd0b1a28c3">peek</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aeffddd45805feb6cc0678738b5c21072">keylet::offer</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>, *cancelSequence));</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> </div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="comment">// It&#39;s not an error to not find the offer to cancel: it might have</span></div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="comment">// been consumed or removed. If it is found, however, it&#39;s an error</span></div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="comment">// to fail to delete it.</span></div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">if</span> (sleCancel)</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> {</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Create cancels order &quot;</span> &lt;&lt; *cancelSequence;</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> result = <a class="code hl_function" href="namespaceripple.html#af0fbc47b561662920c4ae9345fe9a027">offerDelete</a>(sb, sleCancel, viewJ);</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> }</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> }</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> </div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <span class="keyword">auto</span> <span class="keyword">const</span> expiration = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[~sfExpiration];</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> </div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#a90a20386ba571f2ca66457dcbb4af422">hasExpired</a>(sb, expiration))</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> {</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="comment">// If the offer has expired, the transaction has successfully</span></div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="comment">// done nothing, so short circuit from here.</span></div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="comment">//</span></div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="comment">// The return code change is attached to featureDepositPreauth as a</span></div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <span class="comment">// convenience. The change is not big enough to deserve a fix code.</span></div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> <span class="keyword">const</span> ter{</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#af16244cf2efd903b4575a0b85c94d159">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(featureDepositPreauth) ? <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a>{<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">tecEXPIRED</a>}</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> : <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a>{<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>}};</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">return</span> {ter, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> }</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> </div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bOpenLedger = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#a4af2aa917f94d3f031d8e53c3211f9e1">open</a>();</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <span class="keywordtype">bool</span> crossed = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> </div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">if</span> (result == <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> {</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <span class="comment">// If a tick size applies, round the offer to the tick size</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; uPaysIssuerID = saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>();</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; uGetsIssuerID = saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>();</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> </div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint8_t</a> uTickSize = Quality::maxTickSize;</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(uPaysIssuerID))</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> {</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> <span class="keyword">auto</span> <span class="keyword">const</span> sle = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#adbca64f4c123b0fbcfdf27586649732b">read</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(uPaysIssuerID));</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">if</span> (sle &amp;&amp; sle-&gt;isFieldPresent(sfTickSize))</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> uTickSize = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(uTickSize, (*sle)[sfTickSize]);</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> }</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(uGetsIssuerID))</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> {</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keyword">auto</span> <span class="keyword">const</span> sle = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#adbca64f4c123b0fbcfdf27586649732b">read</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(uGetsIssuerID));</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">if</span> (sle &amp;&amp; sle-&gt;isFieldPresent(sfTickSize))</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> uTickSize = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(uTickSize, (*sle)[sfTickSize]);</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> }</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">if</span> (uTickSize &lt; Quality::maxTickSize)</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> {</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> <span class="keyword">auto</span> <span class="keyword">const</span> rate =</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> Quality{saTakerGets, saTakerPays}.round(uTickSize).rate();</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> </div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> <span class="comment">// We round the side that&#39;s not exact,</span></div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> <span class="comment">// just as if the offer happened to execute</span></div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="comment">// at a slightly better (for the placer) rate</span></div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">if</span> (bSell)</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> {</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="comment">// this is a sell, round taker pays</span></div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> saTakerPays = <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(saTakerGets, rate, saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>());</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> }</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> {</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="comment">// this is a buy, round taker gets</span></div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> saTakerGets = <a class="code hl_function" href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">divide</a>(saTakerPays, rate, saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>());</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> }</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">if</span> (!saTakerGets || !saTakerPays)</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> {</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Offer rounded to zero&quot;</span>;</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> }</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> </div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> uRate = <a class="code hl_function" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">getRate</a>(saTakerGets, saTakerPays);</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> }</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> </div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <span class="comment">// We reverse pays and gets because during crossing we are taking.</span></div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> Amounts <span class="keyword">const</span> takerAmount(saTakerGets, saTakerPays);</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> </div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Attempting cross: &quot;</span></div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(takerAmount.in.issue()) &lt;&lt; <span class="stringliteral">&quot; -&gt; &quot;</span></div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(takerAmount.out.issue());</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> </div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> {</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> stream &lt;&lt; <span class="stringliteral">&quot; mode: &quot;</span> &lt;&lt; (bPassive ? <span class="stringliteral">&quot;passive &quot;</span> : <span class="stringliteral">&quot;&quot;</span>)</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> &lt;&lt; (bSell ? <span class="stringliteral">&quot;sell&quot;</span> : <span class="stringliteral">&quot;buy&quot;</span>);</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> stream &lt;&lt; <span class="stringliteral">&quot; in: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(takerAmount.in);</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> stream &lt;&lt; <span class="stringliteral">&quot; out: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(takerAmount.out);</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> }</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> </div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> <span class="comment">// The amount of the offer that is unfilled after crossing has been</span></div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <span class="comment">// performed. It may be equal to the original amount (didn&#39;t cross),</span></div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <span class="comment">// empty (fully crossed), or something in-between.</span></div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> Amounts place_offer;</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <a class="code hl_class" href="classripple_1_1PaymentSandbox.html">PaymentSandbox</a> psbFlow{&amp;sb};</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> <a class="code hl_class" href="classripple_1_1PaymentSandbox.html">PaymentSandbox</a> psbCancelFlow{&amp;sbCancel};</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> </div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/tie.html">std::tie</a>(result, place_offer) =</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <a class="code hl_function" href="classripple_1_1CreateOffer.html#a075657a93544badfea2751685b4304f8">flowCross</a>(psbFlow, psbCancelFlow, takerAmount, domainID);</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> psbFlow.apply(sb);</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> psbCancelFlow.apply(sbCancel);</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="comment">// Note that we we use the value from the sequence or ticket as the</span></div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <span class="comment">// offer sequence. For more explanation see comments in SeqProxy.h.</span></div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keyword">auto</span> <span class="keyword">const</span> offerSequence = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>.<a class="code hl_function" href="classripple_1_1STTx.html#ab560bf669b9e15d7cfb91bb9da4a104a">getSeqValue</a>();</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> </div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> <span class="comment">// This is the original rate of the offer, and is the rate at which</span></div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> <span class="comment">// it will be placed, even if crossing offers change the amounts that</span></div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> <span class="comment">// end up on the books.</span></div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keyword">auto</span> uRate = <a class="code hl_function" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">getRate</a>(saTakerGets, saTakerPays);</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> </div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="keyword">auto</span> viewJ = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a6ec1f10e560afe30ed435c3f7eea715d">app</a>.<a class="code hl_function" href="classripple_1_1Application.html#a2897c28a5b5040e80e66f676d201d03f">journal</a>(<span class="stringliteral">&quot;View&quot;</span>);</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> </div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> result = <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>;</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> </div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> <span class="comment">// Process a cancellation request that&#39;s passed along with an offer.</span></div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">if</span> (cancelSequence)</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> {</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleCancel =</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#afe88196d7aec85f2af00d7cd0b1a28c3">peek</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aeffddd45805feb6cc0678738b5c21072">keylet::offer</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>, *cancelSequence));</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> </div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="comment">// It&#39;s not an error to not find the offer to cancel: it might have</span></div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="comment">// been consumed or removed. If it is found, however, it&#39;s an error</span></div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="comment">// to fail to delete it.</span></div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">if</span> (sleCancel)</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> {</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Create cancels order &quot;</span> &lt;&lt; *cancelSequence;</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> result = <a class="code hl_function" href="namespaceripple.html#af0fbc47b561662920c4ae9345fe9a027">offerDelete</a>(sb, sleCancel, viewJ);</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> }</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> }</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> </div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keyword">auto</span> <span class="keyword">const</span> expiration = <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>[~sfExpiration];</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> </div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#a90a20386ba571f2ca66457dcbb4af422">hasExpired</a>(sb, expiration))</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> {</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="comment">// If the offer has expired, the transaction has successfully</span></div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="comment">// done nothing, so short circuit from here.</span></div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="comment">//</span></div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="comment">// The return code change is attached to featureDepositPreauth as a</span></div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> <span class="comment">// convenience. The change is not big enough to deserve a fix code.</span></div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> <span class="keyword">const</span> ter{</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#af16244cf2efd903b4575a0b85c94d159">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(featureDepositPreauth) ? <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a>{<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">tecEXPIRED</a>}</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> : <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a>{<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>}};</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">return</span> {ter, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> }</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> </div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bOpenLedger = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#a4af2aa917f94d3f031d8e53c3211f9e1">open</a>();</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="keywordtype">bool</span> crossed = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> </div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">if</span> (result == <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> {</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="comment">// If a tick size applies, round the offer to the tick size</span></div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; uPaysIssuerID = saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>();</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; uGetsIssuerID = saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#aaac822e5948df5f12b6eaf48feaf1684">getIssuer</a>();</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> </div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint8_t</a> uTickSize = Quality::maxTickSize;</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(uPaysIssuerID))</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> {</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> <span class="keyword">auto</span> <span class="keyword">const</span> sle = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#adbca64f4c123b0fbcfdf27586649732b">read</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(uPaysIssuerID));</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">if</span> (sle &amp;&amp; sle-&gt;isFieldPresent(sfTickSize))</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> uTickSize = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(uTickSize, (*sle)[sfTickSize]);</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> }</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(uGetsIssuerID))</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> {</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keyword">auto</span> <span class="keyword">const</span> sle = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#adbca64f4c123b0fbcfdf27586649732b">read</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(uGetsIssuerID));</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">if</span> (sle &amp;&amp; sle-&gt;isFieldPresent(sfTickSize))</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> uTickSize = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(uTickSize, (*sle)[sfTickSize]);</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> }</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">if</span> (uTickSize &lt; Quality::maxTickSize)</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> {</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> <span class="keyword">auto</span> <span class="keyword">const</span> rate =</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> Quality{saTakerGets, saTakerPays}.round(uTickSize).rate();</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> </div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="comment">// We round the side that&#39;s not exact,</span></div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> <span class="comment">// just as if the offer happened to execute</span></div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> <span class="comment">// at a slightly better (for the placer) rate</span></div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">if</span> (bSell)</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> {</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="comment">// this is a sell, round taker pays</span></div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> saTakerPays = <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(saTakerGets, rate, saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>());</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> }</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> {</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> <span class="comment">// this is a buy, round taker gets</span></div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> saTakerGets = <a class="code hl_function" href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">divide</a>(saTakerPays, rate, saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>());</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> }</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">if</span> (!saTakerGets || !saTakerPays)</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> {</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Offer rounded to zero&quot;</span>;</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> }</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> </div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> uRate = <a class="code hl_function" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">getRate</a>(saTakerGets, saTakerPays);</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> }</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> </div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="comment">// We reverse pays and gets because during crossing we are taking.</span></div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> Amounts <span class="keyword">const</span> takerAmount(saTakerGets, saTakerPays);</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> </div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Attempting cross: &quot;</span></div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(takerAmount.in.issue()) &lt;&lt; <span class="stringliteral">&quot; -&gt; &quot;</span></div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(takerAmount.out.issue());</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> </div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> {</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> stream &lt;&lt; <span class="stringliteral">&quot; mode: &quot;</span> &lt;&lt; (bPassive ? <span class="stringliteral">&quot;passive &quot;</span> : <span class="stringliteral">&quot;&quot;</span>)</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> &lt;&lt; (bSell ? <span class="stringliteral">&quot;sell&quot;</span> : <span class="stringliteral">&quot;buy&quot;</span>);</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> stream &lt;&lt; <span class="stringliteral">&quot; in: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(takerAmount.in);</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> stream &lt;&lt; <span class="stringliteral">&quot; out: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(takerAmount.out);</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> }</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> </div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="comment">// The amount of the offer that is unfilled after crossing has been</span></div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="comment">// performed. It may be equal to the original amount (didn&#39;t cross),</span></div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <span class="comment">// empty (fully crossed), or something in-between.</span></div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> Amounts place_offer;</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <a class="code hl_class" href="classripple_1_1PaymentSandbox.html">PaymentSandbox</a> psbFlow{&amp;sb};</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> <a class="code hl_class" href="classripple_1_1PaymentSandbox.html">PaymentSandbox</a> psbCancelFlow{&amp;sbCancel};</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> </div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/tie.html">std::tie</a>(result, place_offer) =</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <a class="code hl_function" href="classripple_1_1CreateOffer.html#a075657a93544badfea2751685b4304f8">flowCross</a>(psbFlow, psbCancelFlow, takerAmount, domainID);</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> psbFlow.apply(sb);</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> psbCancelFlow.apply(sbCancel);</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> </div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> <span class="comment">// We expect the implementation of cross to succeed</span></div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <span class="comment">// or give a tec.</span></div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> result == <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a> || <a class="code hl_function" href="namespaceripple.html#ae193bf65f233ba37c47a7a8fc49a26e4">isTecClaim</a>(result),</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <span class="stringliteral">&quot;ripple::CreateOffer::applyGuts : result is tesSUCCESS or &quot;</span></div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <span class="stringliteral">&quot;tecCLAIM&quot;</span>);</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> </div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> {</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> stream &lt;&lt; <span class="stringliteral">&quot;Cross result: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#a875ae996b37ed036597d70628ae053e3">transToken</a>(result);</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> stream &lt;&lt; <span class="stringliteral">&quot; in: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(place_offer.in);</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> stream &lt;&lt; <span class="stringliteral">&quot; out: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(place_offer.out);</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> }</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> </div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <span class="comment">// We expect the implementation of cross to succeed</span></div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <span class="comment">// or give a tec.</span></div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> result == <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a> || <a class="code hl_function" href="namespaceripple.html#ae193bf65f233ba37c47a7a8fc49a26e4">isTecClaim</a>(result),</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <span class="stringliteral">&quot;ripple::CreateOffer::applyGuts : result is tesSUCCESS or &quot;</span></div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> <span class="stringliteral">&quot;tecCLAIM&quot;</span>);</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> </div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> {</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> stream &lt;&lt; <span class="stringliteral">&quot;Cross result: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#a875ae996b37ed036597d70628ae053e3">transToken</a>(result);</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> stream &lt;&lt; <span class="stringliteral">&quot; in: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(place_offer.in);</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> stream &lt;&lt; <span class="stringliteral">&quot; out: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(place_offer.out);</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> }</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> </div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">if</span> (result == <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caecd11145ac07375d1c0793e699932969">tecFAILED_PROCESSING</a> &amp;&amp; bOpenLedger)</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> result = <a class="code hl_enumvalue" href="namespaceripple.html#a260d2970ac1119109937ed1c5d4ca962a453d7db3d36a5516e925c466d1dc0ac1">telFAILED_PROCESSING</a>;</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> </div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <span class="keywordflow">if</span> (result != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> {</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#a875ae996b37ed036597d70628ae053e3">transToken</a>(result);</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> }</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> </div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>() == place_offer.in.issue(),</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <span class="stringliteral">&quot;ripple::CreateOffer::applyGuts : taker gets issue match&quot;</span>);</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>() == place_offer.out.issue(),</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <span class="stringliteral">&quot;ripple::CreateOffer::applyGuts : taker pays issue match&quot;</span>);</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> </div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="keywordflow">if</span> (takerAmount != place_offer)</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> crossed = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> </div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="comment">// The offer that we need to place after offer crossing should</span></div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="comment">// never be negative. If it is, something went very very wrong.</span></div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">if</span> (place_offer.in &lt; zero || place_offer.out &lt; zero)</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> {</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">fatal</a>()) &lt;&lt; <span class="stringliteral">&quot;Cross left offer negative!&quot;</span></div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> &lt;&lt; <span class="stringliteral">&quot; in: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(place_offer.in)</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> &lt;&lt; <span class="stringliteral">&quot; out: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(place_offer.out);</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ad035d214edc31c72362d7efbdaba234c">tefINTERNAL</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> }</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> </div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">if</span> (place_offer.in == zero || place_offer.out == zero)</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> {</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Offer fully crossed!&quot;</span>;</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> }</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> </div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="comment">// We now need to adjust the offer to reflect the amount left after</span></div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <span class="comment">// crossing. We reverse in and out here, since during crossing we</span></div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <span class="comment">// were the taker.</span></div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> saTakerPays = place_offer.out;</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> saTakerGets = place_offer.in;</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> }</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> </div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> saTakerPays &gt; zero &amp;&amp; saTakerGets &gt; zero,</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <span class="stringliteral">&quot;ripple::CreateOffer::applyGuts : taker pays and gets positive&quot;</span>);</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> </div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="keywordflow">if</span> (result != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> {</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#a875ae996b37ed036597d70628ae053e3">transToken</a>(result);</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> }</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> </div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> {</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> stream &lt;&lt; <span class="stringliteral">&quot;Place&quot;</span> &lt;&lt; (crossed ? <span class="stringliteral">&quot; remaining &quot;</span> : <span class="stringliteral">&quot; &quot;</span>) &lt;&lt; <span class="stringliteral">&quot;offer:&quot;</span>;</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> stream &lt;&lt; <span class="stringliteral">&quot; Pays: &quot;</span> &lt;&lt; saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#aee39db45aa65eddca7002ad9bf3e7877">getFullText</a>();</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> stream &lt;&lt; <span class="stringliteral">&quot; Gets: &quot;</span> &lt;&lt; saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#aee39db45aa65eddca7002ad9bf3e7877">getFullText</a>();</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> }</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> </div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <span class="comment">// For &#39;fill or kill&#39; offers, failure to fully cross means that the</span></div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <span class="comment">// entire operation should be aborted, with only fees paid.</span></div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">if</span> (bFillOrKill)</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> {</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;Fill or Kill: offer killed&quot;</span>;</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca82773cd87fbf942a9cb626416218f52b">tecKILLED</a>, <span class="keyword">false</span>};</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <span class="keywordflow">if</span> (result == <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caecd11145ac07375d1c0793e699932969">tecFAILED_PROCESSING</a> &amp;&amp; bOpenLedger)</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> result = <a class="code hl_enumvalue" href="namespaceripple.html#a260d2970ac1119109937ed1c5d4ca962a453d7db3d36a5516e925c466d1dc0ac1">telFAILED_PROCESSING</a>;</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> </div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">if</span> (result != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> {</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#a875ae996b37ed036597d70628ae053e3">transToken</a>(result);</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> }</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> </div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>() == place_offer.in.issue(),</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> <span class="stringliteral">&quot;ripple::CreateOffer::applyGuts : taker gets issue match&quot;</span>);</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>() == place_offer.out.issue(),</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <span class="stringliteral">&quot;ripple::CreateOffer::applyGuts : taker pays issue match&quot;</span>);</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> </div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">if</span> (takerAmount != place_offer)</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> crossed = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> </div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <span class="comment">// The offer that we need to place after offer crossing should</span></div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <span class="comment">// never be negative. If it is, something went very very wrong.</span></div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> <span class="keywordflow">if</span> (place_offer.in &lt; zero || place_offer.out &lt; zero)</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> {</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">fatal</a>()) &lt;&lt; <span class="stringliteral">&quot;Cross left offer negative!&quot;</span></div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> &lt;&lt; <span class="stringliteral">&quot; in: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(place_offer.in)</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> &lt;&lt; <span class="stringliteral">&quot; out: &quot;</span> &lt;&lt; <a class="code hl_function" href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">format_amount</a>(place_offer.out);</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ad035d214edc31c72362d7efbdaba234c">tefINTERNAL</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> }</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> </div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">if</span> (place_offer.in == zero || place_offer.out == zero)</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> {</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;Offer fully crossed!&quot;</span>;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> }</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> </div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="comment">// We now need to adjust the offer to reflect the amount left after</span></div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <span class="comment">// crossing. We reverse in and out here, since during crossing we</span></div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="comment">// were the taker.</span></div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> saTakerPays = place_offer.out;</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> saTakerGets = place_offer.in;</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> }</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> </div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> saTakerPays &gt; zero &amp;&amp; saTakerGets &gt; zero,</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> <span class="stringliteral">&quot;ripple::CreateOffer::applyGuts : taker pays and gets positive&quot;</span>);</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> </div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">if</span> (result != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> {</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#a875ae996b37ed036597d70628ae053e3">transToken</a>(result);</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> }</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> </div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> {</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> stream &lt;&lt; <span class="stringliteral">&quot;Place&quot;</span> &lt;&lt; (crossed ? <span class="stringliteral">&quot; remaining &quot;</span> : <span class="stringliteral">&quot; &quot;</span>) &lt;&lt; <span class="stringliteral">&quot;offer:&quot;</span>;</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> stream &lt;&lt; <span class="stringliteral">&quot; Pays: &quot;</span> &lt;&lt; saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#aee39db45aa65eddca7002ad9bf3e7877">getFullText</a>();</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> stream &lt;&lt; <span class="stringliteral">&quot; Gets: &quot;</span> &lt;&lt; saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#aee39db45aa65eddca7002ad9bf3e7877">getFullText</a>();</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> }</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> </div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="comment">// For &#39;fill or kill&#39; offers, failure to fully cross means that the</span></div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="comment">// entire operation should be aborted, with only fees paid.</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">if</span> (bFillOrKill)</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> {</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;Fill or Kill: offer killed&quot;</span>;</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca82773cd87fbf942a9cb626416218f52b">tecKILLED</a>, <span class="keyword">false</span>};</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> }</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> </div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <span class="comment">// For &#39;immediate or cancel&#39; offers, the amount remaining doesn&#39;t get</span></div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <span class="comment">// placed - it gets canceled and the operation succeeds.</span></div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">if</span> (bImmediateOrCancel)</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> {</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;Immediate or cancel: offer canceled&quot;</span>;</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">if</span> (!crossed &amp;&amp; sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#af16244cf2efd903b4575a0b85c94d159">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(featureImmediateOfferKilled))</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <span class="comment">// If the ImmediateOfferKilled amendment is enabled, any</span></div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <span class="comment">// ImmediateOrCancel offer that transfers absolutely no funds</span></div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="comment">// returns tecKILLED rather than tesSUCCESS. Motivation for the</span></div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="comment">// change is here: https://github.com/ripple/rippled/issues/4115</span></div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca82773cd87fbf942a9cb626416218f52b">tecKILLED</a>, <span class="keyword">false</span>};</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> }</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> </div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <span class="comment">// For &#39;immediate or cancel&#39; offers, the amount remaining doesn&#39;t get</span></div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="comment">// placed - it gets canceled and the operation succeeds.</span></div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">if</span> (bImmediateOrCancel)</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> {</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;Immediate or cancel: offer canceled&quot;</span>;</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">if</span> (!crossed &amp;&amp; sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#af16244cf2efd903b4575a0b85c94d159">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(featureImmediateOfferKilled))</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="comment">// If the ImmediateOfferKilled amendment is enabled, any</span></div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> <span class="comment">// ImmediateOrCancel offer that transfers absolutely no funds</span></div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="comment">// returns tecKILLED rather than tesSUCCESS. Motivation for the</span></div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="comment">// change is here: https://github.com/ripple/rippled/issues/4115</span></div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca82773cd87fbf942a9cb626416218f52b">tecKILLED</a>, <span class="keyword">false</span>};</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> }</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> </div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleCreator = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#afe88196d7aec85f2af00d7cd0b1a28c3">peek</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>));</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="keywordflow">if</span> (!sleCreator)</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ad035d214edc31c72362d7efbdaba234c">tefINTERNAL</a>, <span class="keyword">false</span>};</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> </div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> {</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> reserve =</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#a08bb2668a3260801e8f7d85b4242eb6c">fees</a>().<a class="code hl_function" href="structripple_1_1Fees.html#acb07843d0d0e3ccacd7cf51d5296fe40">accountReserve</a>(sleCreator-&gt;getFieldU32(sfOwnerCount) + 1);</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> </div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Transactor.html#abb2f6f5d7fd8c663c5df76b6fcba2c49">mPriorBalance</a> &lt; reserve)</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> {</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <span class="comment">// If we are here, the signing account had an insufficient reserve</span></div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> <span class="comment">// *prior* to our processing. If something actually crossed, then</span></div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="comment">// we allow this; otherwise, we just claim a fee.</span></div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> <span class="keywordflow">if</span> (!crossed)</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> result = <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca30792765079d182f869612fc3b96ef8c">tecINSUF_RESERVE_OFFER</a>;</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> </div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">if</span> (result != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> {</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#a875ae996b37ed036597d70628ae053e3">transToken</a>(result);</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> }</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> </div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> }</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> }</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> </div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <span class="comment">// We need to place the remainder of the offer into its order book.</span></div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> <span class="keyword">auto</span> <span class="keyword">const</span> offer_index = <a class="code hl_function" href="namespaceripple_1_1keylet.html#aeffddd45805feb6cc0678738b5c21072">keylet::offer</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>, offerSequence);</div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> </div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <span class="comment">// Add offer to owner&#39;s directory.</span></div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="keyword">auto</span> <span class="keyword">const</span> ownerNode = sb.<a class="code hl_function" href="classripple_1_1ApplyView.html#ae21b78e549dc6188382bd49e7d77d473">dirInsert</a>(</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <a class="code hl_function" href="namespaceripple_1_1keylet.html#acd4d51d467fc6e75745baf179a7965ef">keylet::ownerDir</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>), offer_index, <a class="code hl_function" href="namespaceripple.html#a5b498122d9b8c1acbeb9fe459faac22b">describeOwnerDir</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>));</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> </div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">if</span> (!ownerNode)</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> {</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>())</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> &lt;&lt; <span class="stringliteral">&quot;final result: failed to add offer to owner&#39;s directory&quot;</span>;</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca4f19fdbc12c26412215f3477f70d5feb">tecDIR_FULL</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> }</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> </div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> <span class="comment">// Update owner count.</span></div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <a class="code hl_function" href="namespaceripple.html#a4e760dff6bf16c74e7ffd43b240718b0">adjustOwnerCount</a>(sb, sleCreator, 1, viewJ);</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> </div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;adding to book: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>())</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> &lt;&lt; <span class="stringliteral">&quot; : &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>())</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> &lt;&lt; (domainID ? (<span class="stringliteral">&quot; : &quot;</span> + <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(*domainID)) : <span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> </div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> <a class="code hl_class" href="classripple_1_1Book.html">Book</a> <span class="keyword">const</span> book{saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), domainID};</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleCreator = sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#afe88196d7aec85f2af00d7cd0b1a28c3">peek</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>));</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">if</span> (!sleCreator)</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ad035d214edc31c72362d7efbdaba234c">tefINTERNAL</a>, <span class="keyword">false</span>};</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> </div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> {</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> reserve =</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#a08bb2668a3260801e8f7d85b4242eb6c">fees</a>().<a class="code hl_function" href="structripple_1_1Fees.html#acb07843d0d0e3ccacd7cf51d5296fe40">accountReserve</a>(sleCreator-&gt;getFieldU32(sfOwnerCount) + 1);</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> </div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Transactor.html#abb2f6f5d7fd8c663c5df76b6fcba2c49">mPriorBalance</a> &lt; reserve)</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> {</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="comment">// If we are here, the signing account had an insufficient reserve</span></div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> <span class="comment">// *prior* to our processing. If something actually crossed, then</span></div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> <span class="comment">// we allow this; otherwise, we just claim a fee.</span></div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">if</span> (!crossed)</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> result = <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca30792765079d182f869612fc3b96ef8c">tecINSUF_RESERVE_OFFER</a>;</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> </div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">if</span> (result != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> {</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#a875ae996b37ed036597d70628ae053e3">transToken</a>(result);</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> }</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> </div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> <span class="keywordflow">return</span> {result, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> }</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> }</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> </div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> <span class="comment">// We need to place the remainder of the offer into its order book.</span></div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="keyword">auto</span> <span class="keyword">const</span> offer_index = <a class="code hl_function" href="namespaceripple_1_1keylet.html#aeffddd45805feb6cc0678738b5c21072">keylet::offer</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>, offerSequence);</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> </div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> <span class="comment">// Add offer to owner&#39;s directory.</span></div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> <span class="keyword">auto</span> <span class="keyword">const</span> ownerNode = sb.<a class="code hl_function" href="classripple_1_1ApplyView.html#ae21b78e549dc6188382bd49e7d77d473">dirInsert</a>(</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> <a class="code hl_function" href="namespaceripple_1_1keylet.html#acd4d51d467fc6e75745baf179a7965ef">keylet::ownerDir</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>), offer_index, <a class="code hl_function" href="namespaceripple.html#a5b498122d9b8c1acbeb9fe459faac22b">describeOwnerDir</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>));</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> </div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> <span class="keywordflow">if</span> (!ownerNode)</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> {</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>())</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> &lt;&lt; <span class="stringliteral">&quot;final result: failed to add offer to owner&#39;s directory&quot;</span>;</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca4f19fdbc12c26412215f3477f70d5feb">tecDIR_FULL</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> }</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> </div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <span class="comment">// Update owner count.</span></div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <a class="code hl_function" href="namespaceripple.html#a4e760dff6bf16c74e7ffd43b240718b0">adjustOwnerCount</a>(sb, sleCreator, 1, viewJ);</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> </div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;adding to book: &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>())</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> &lt;&lt; <span class="stringliteral">&quot; : &quot;</span> &lt;&lt; <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>())</div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> &lt;&lt; (domainID ? (<span class="stringliteral">&quot; : &quot;</span> + <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(*domainID)) : <span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> </div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <a class="code hl_class" href="classripple_1_1Book.html">Book</a> <span class="keyword">const</span> book{saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), domainID};</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> </div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> <span class="comment">// Add offer to order book, using the original rate</span></div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <span class="comment">// before any crossing occured.</span></div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> <span class="comment">//</span></div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> <span class="comment">// Regular offer - BookDirectory points to open directory</span></div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> <span class="comment">//</span></div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> <span class="comment">// Domain offer (w/o hyrbid) - BookDirectory points to domain</span></div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <span class="comment">// directory</span></div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <span class="comment">//</span></div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <span class="comment">// Hybrid domain offer - BookDirectory points to domain directory,</span></div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> <span class="comment">// and AdditionalBooks field stores one entry that points to the open</span></div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> <span class="comment">// directory</span></div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="keyword">auto</span> dir = <a class="code hl_function" href="namespaceripple_1_1keylet.html#a0a100bd2f819f22d2ef41ed7d83a9192">keylet::quality</a>(<a class="code hl_variable" href="namespaceripple_1_1keylet.html#a5dc4ad00b59a4e63406dab067f0fe021">keylet::book</a>(book), uRate);</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bookExisted = <span class="keyword">static_cast&lt;</span><span class="keywordtype">bool</span><span class="keyword">&gt;</span>(sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#afe88196d7aec85f2af00d7cd0b1a28c3">peek</a>(dir));</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> </div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="comment">// Add offer to order book, using the original rate</span></div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <span class="comment">// before any crossing occured.</span></div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> <span class="comment">//</span></div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> <span class="comment">// Regular offer - BookDirectory points to open directory</span></div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="comment">//</span></div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <span class="comment">// Domain offer (w/o hyrbid) - BookDirectory points to domain</span></div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <span class="comment">// directory</span></div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> <span class="comment">//</span></div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <span class="comment">// Hybrid domain offer - BookDirectory points to domain directory,</span></div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> <span class="comment">// and AdditionalBooks field stores one entry that points to the open</span></div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> <span class="comment">// directory</span></div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keyword">auto</span> dir = <a class="code hl_function" href="namespaceripple_1_1keylet.html#a0a100bd2f819f22d2ef41ed7d83a9192">keylet::quality</a>(<a class="code hl_variable" href="namespaceripple_1_1keylet.html#a5dc4ad00b59a4e63406dab067f0fe021">keylet::book</a>(book), uRate);</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> bookExisted = <span class="keyword">static_cast&lt;</span><span class="keywordtype">bool</span><span class="keyword">&gt;</span>(sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#afe88196d7aec85f2af00d7cd0b1a28c3">peek</a>(dir));</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> </div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> <span class="keyword">auto</span> setBookDir = [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">SLE::ref</a> sle,</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;uint256&gt;</a> <span class="keyword">const</span>&amp; maybeDomain) {</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> sle-&gt;setFieldH160(sfTakerPaysCurrency, saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>);</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> sle-&gt;setFieldH160(sfTakerPaysIssuer, saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">account</a>);</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> sle-&gt;setFieldH160(sfTakerGetsCurrency, saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>);</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> sle-&gt;setFieldH160(sfTakerGetsIssuer, saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">account</a>);</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> sle-&gt;setFieldU64(sfExchangeRate, uRate);</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> <span class="keywordflow">if</span> (maybeDomain)</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> sle-&gt;setFieldH256(sfDomainID, *maybeDomain);</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> };</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> </div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> <span class="keyword">auto</span> <span class="keyword">const</span> bookNode = sb.<a class="code hl_function" href="classripple_1_1ApplyView.html#a6dc52893f14495b06de08265f6e1e45a">dirAppend</a>(dir, offer_index, [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">SLE::ref</a> sle) {</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> <span class="comment">// sets domainID on book directory if it&#39;s a domain offer</span></div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> setBookDir(sle, domainID);</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> });</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> </div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> <span class="keywordflow">if</span> (!bookNode)</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> {</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: failed to add offer to book&quot;</span>;</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca4f19fdbc12c26412215f3477f70d5feb">tecDIR_FULL</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> }</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> </div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> <span class="keyword">auto</span> sleOffer = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_shared&lt;SLE&gt;</a>(offer_index);</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> sleOffer-&gt;setAccountID(sfAccount, <a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>);</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> sleOffer-&gt;setFieldU32(sfSequence, offerSequence);</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> sleOffer-&gt;setFieldH256(sfBookDirectory, dir.key);</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> sleOffer-&gt;setFieldAmount(sfTakerPays, saTakerPays);</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> sleOffer-&gt;setFieldAmount(sfTakerGets, saTakerGets);</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> sleOffer-&gt;setFieldU64(sfOwnerNode, *ownerNode);</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> sleOffer-&gt;setFieldU64(sfBookNode, *bookNode);</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> <span class="keywordflow">if</span> (expiration)</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> sleOffer-&gt;setFieldU32(sfExpiration, *expiration);</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">if</span> (bPassive)</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> sleOffer-&gt;setFlag(<a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5af5bb4ed279c86f7c4ddfe0b2ed89af00">lsfPassive</a>);</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> <span class="keywordflow">if</span> (bSell)</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> sleOffer-&gt;setFlag(<a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5ab4f5e24467c127ce07228288a7b54760">lsfSell</a>);</div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> <span class="keywordflow">if</span> (domainID)</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> sleOffer-&gt;setFieldH256(sfDomainID, *domainID);</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="keyword">auto</span> setBookDir = [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">SLE::ref</a> sle,</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;uint256&gt;</a> <span class="keyword">const</span>&amp; maybeDomain) {</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> sle-&gt;setFieldH160(sfTakerPaysCurrency, saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>);</div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> sle-&gt;setFieldH160(sfTakerPaysIssuer, saTakerPays.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">account</a>);</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> sle-&gt;setFieldH160(sfTakerGetsCurrency, saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>);</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> sle-&gt;setFieldH160(sfTakerGetsIssuer, saTakerGets.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>().<a class="code hl_variable" href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">account</a>);</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> sle-&gt;setFieldU64(sfExchangeRate, uRate);</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">if</span> (maybeDomain)</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> sle-&gt;setFieldH256(sfDomainID, *maybeDomain);</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> };</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> </div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keyword">auto</span> <span class="keyword">const</span> bookNode = sb.<a class="code hl_function" href="classripple_1_1ApplyView.html#a6dc52893f14495b06de08265f6e1e45a">dirAppend</a>(dir, offer_index, [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">SLE::ref</a> sle) {</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <span class="comment">// sets domainID on book directory if it&#39;s a domain offer</span></div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> setBookDir(sle, domainID);</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> });</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> </div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">if</span> (!bookNode)</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> {</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: failed to add offer to book&quot;</span>;</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca4f19fdbc12c26412215f3477f70d5feb">tecDIR_FULL</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> }</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> </div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> <span class="keyword">auto</span> sleOffer = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_shared&lt;SLE&gt;</a>(offer_index);</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> sleOffer-&gt;setAccountID(sfAccount, <a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>);</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> sleOffer-&gt;setFieldU32(sfSequence, offerSequence);</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> sleOffer-&gt;setFieldH256(sfBookDirectory, dir.key);</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> sleOffer-&gt;setFieldAmount(sfTakerPays, saTakerPays);</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> sleOffer-&gt;setFieldAmount(sfTakerGets, saTakerGets);</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> sleOffer-&gt;setFieldU64(sfOwnerNode, *ownerNode);</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> sleOffer-&gt;setFieldU64(sfBookNode, *bookNode);</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> <span class="keywordflow">if</span> (expiration)</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> sleOffer-&gt;setFieldU32(sfExpiration, *expiration);</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> <span class="keywordflow">if</span> (bPassive)</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> sleOffer-&gt;setFlag(<a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5af5bb4ed279c86f7c4ddfe0b2ed89af00">lsfPassive</a>);</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> <span class="keywordflow">if</span> (bSell)</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> sleOffer-&gt;setFlag(<a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5ab4f5e24467c127ce07228288a7b54760">lsfSell</a>);</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">if</span> (domainID)</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> sleOffer-&gt;setFieldH256(sfDomainID, *domainID);</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> </div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> <span class="comment">// if it&#39;s a hybrid offer, set hybrid flag, and create an open dir</span></div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">if</span> (bHybrid)</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> {</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keyword">auto</span> <span class="keyword">const</span> res = <a class="code hl_function" href="classripple_1_1CreateOffer.html#ab9e0f2e14fa541676412a148b4823f4c">applyHybrid</a>(</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> sb, sleOffer, offer_index, saTakerPays, saTakerGets, setBookDir);</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> <span class="keywordflow">if</span> (res != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">return</span> {res, <span class="keyword">true</span>}; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> }</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> </div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#a669490ced7bb2cab3a6cc704bc7286df">insert</a>(sleOffer);</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> </div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> <span class="keywordflow">if</span> (!bookExisted)</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a6ec1f10e560afe30ed435c3f7eea715d">app</a>.<a class="code hl_function" href="classripple_1_1Application.html#a477219b05fb65f86a6dee712bf778280">getOrderBookDB</a>().<a class="code hl_function" href="classripple_1_1OrderBookDB.html#a0faba63ac03924d89a07b2dd69bcd206">addOrderBook</a>(book);</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> </div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> <span class="comment">// if it&#39;s a hybrid offer, set hybrid flag, and create an open dir</span></div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">if</span> (bHybrid)</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> {</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> <span class="keyword">auto</span> <span class="keyword">const</span> res = <a class="code hl_function" href="classripple_1_1CreateOffer.html#ab9e0f2e14fa541676412a148b4823f4c">applyHybrid</a>(</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> sb, sleOffer, offer_index, saTakerPays, saTakerGets, setBookDir);</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">if</span> (res != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> <span class="keywordflow">return</span> {res, <span class="keyword">true</span>}; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> }</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> </div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#a669490ced7bb2cab3a6cc704bc7286df">insert</a>(sleOffer);</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> </div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> <span class="keywordflow">if</span> (!bookExisted)</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a6ec1f10e560afe30ed435c3f7eea715d">app</a>.<a class="code hl_function" href="classripple_1_1Application.html#a477219b05fb65f86a6dee712bf778280">getOrderBookDB</a>().<a class="code hl_function" href="classripple_1_1OrderBookDB.html#a0faba63ac03924d89a07b2dd69bcd206">addOrderBook</a>(book);</div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> </div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: success&quot;</span>;</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> </div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span>}</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> JLOG(<a class="code hl_variable" href="classripple_1_1Transactor.html#ab84d1ef5275a1c6c63176c11d72d6235">j_</a>.<a class="code hl_function" href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">debug</a>()) &lt;&lt; <span class="stringliteral">&quot;final result: success&quot;</span>;</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> </div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span>}</div>
</div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> </div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span><a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a></div>
<div class="foldopen" id="foldopen00940" data-start="{" data-end="}">
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"><a class="line" href="classripple_1_1CreateOffer.html#ae8670d9db3224f61491379bfeaf6719f"> 940</a></span><a class="code hl_function" href="classripple_1_1CreateOffer.html#ae8670d9db3224f61491379bfeaf6719f">CreateOffer::doApply</a>()</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span>{</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> <span class="comment">// This is the ledger view that we work against. Transactions are applied</span></div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> <span class="comment">// as we go on processing transactions.</span></div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a> sb(&amp;<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_function" href="classripple_1_1ApplyContext.html#a44c249b16b2cedb1224a96592407558d">view</a>());</div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> </div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> <span class="comment">// This is a ledger with just the fees paid and any unfunded or expired</span></div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> <span class="comment">// offers we encounter removed. It&#39;s used when handling Fill-or-Kill offers,</span></div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> <span class="comment">// if the order isn&#39;t going to be placed, to avoid wasting the work we did.</span></div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a> sbCancel(&amp;<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_function" href="classripple_1_1ApplyContext.html#a44c249b16b2cedb1224a96592407558d">view</a>());</div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> </div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> <span class="keyword">auto</span> <span class="keyword">const</span> result = <a class="code hl_function" href="classripple_1_1CreateOffer.html#af1e3edb1dcc853bf59a5c63f366f29e9">applyGuts</a>(sb, sbCancel);</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> <span class="keywordflow">if</span> (result.second)</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> sb.<a class="code hl_function" href="classripple_1_1Sandbox.html#af027065a92ed80c4b54b08d7974c06ce">apply</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_function" href="classripple_1_1ApplyContext.html#a1e569090b00ae5425ebb48c1befe794f">rawView</a>());</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> sbCancel.<a class="code hl_function" href="classripple_1_1Sandbox.html#af027065a92ed80c4b54b08d7974c06ce">apply</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_function" href="classripple_1_1ApplyContext.html#a1e569090b00ae5425ebb48c1befe794f">rawView</a>());</div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> <span class="keywordflow">return</span> result.first;</div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span>}</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> </div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span><a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a></div>
<div class="foldopen" id="foldopen00926" data-start="{" data-end="}">
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"><a class="line" href="classripple_1_1CreateOffer.html#ae8670d9db3224f61491379bfeaf6719f"> 926</a></span><a class="code hl_function" href="classripple_1_1CreateOffer.html#ae8670d9db3224f61491379bfeaf6719f">CreateOffer::doApply</a>()</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span>{</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <span class="comment">// This is the ledger view that we work against. Transactions are applied</span></div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <span class="comment">// as we go on processing transactions.</span></div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a> sb(&amp;<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_function" href="classripple_1_1ApplyContext.html#a44c249b16b2cedb1224a96592407558d">view</a>());</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> </div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> <span class="comment">// This is a ledger with just the fees paid and any unfunded or expired</span></div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> <span class="comment">// offers we encounter removed. It&#39;s used when handling Fill-or-Kill offers,</span></div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> <span class="comment">// if the order isn&#39;t going to be placed, to avoid wasting the work we did.</span></div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a> sbCancel(&amp;<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_function" href="classripple_1_1ApplyContext.html#a44c249b16b2cedb1224a96592407558d">view</a>());</div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> </div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> <span class="keyword">auto</span> <span class="keyword">const</span> result = <a class="code hl_function" href="classripple_1_1CreateOffer.html#af1e3edb1dcc853bf59a5c63f366f29e9">applyGuts</a>(sb, sbCancel);</div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">if</span> (result.second)</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> sb.<a class="code hl_function" href="classripple_1_1Sandbox.html#af027065a92ed80c4b54b08d7974c06ce">apply</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_function" href="classripple_1_1ApplyContext.html#a1e569090b00ae5425ebb48c1befe794f">rawView</a>());</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> sbCancel.<a class="code hl_function" href="classripple_1_1Sandbox.html#af027065a92ed80c4b54b08d7974c06ce">apply</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_function" href="classripple_1_1ApplyContext.html#a1e569090b00ae5425ebb48c1befe794f">rawView</a>());</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> <span class="keywordflow">return</span> result.first;</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span>}</div>
</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> </div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span>} <span class="comment">// namespace ripple</span></div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> </div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span>} <span class="comment">// namespace ripple</span></div>
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html"><div class="ttname"><a href="classbeast_1_1Journal.html">beast::Journal</a></div><div class="ttdoc">A generic endpoint for log messages.</div><div class="ttdef"><b>Definition</b> <a href="Journal_8h_source.html#l00059">Journal.h:60</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a3dfb8e2e3eecccdb5cf78ff21bca069c"><div class="ttname"><a href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">beast::Journal::fatal</a></div><div class="ttdeci">Stream fatal() const</div><div class="ttdef"><b>Definition</b> <a href="Journal_8h_source.html#l00352">Journal.h:352</a></div></div>
@@ -1080,14 +1066,14 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1CreateOffer_html_a075657a93544badfea2751685b4304f8"><div class="ttname"><a href="classripple_1_1CreateOffer.html#a075657a93544badfea2751685b4304f8">ripple::CreateOffer::flowCross</a></div><div class="ttdeci">std::pair&lt; TER, Amounts &gt; flowCross(PaymentSandbox &amp;psb, PaymentSandbox &amp;psbCancel, Amounts const &amp;takerAmount, std::optional&lt; uint256 &gt; const &amp;domainID)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00321">CreateOffer.cpp:321</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_a427d7e54e0525a05fb2d613fdd0b15d5"><div class="ttname"><a href="classripple_1_1CreateOffer.html#a427d7e54e0525a05fb2d613fdd0b15d5">ripple::CreateOffer::checkAcceptAsset</a></div><div class="ttdeci">static TER checkAcceptAsset(ReadView const &amp;view, ApplyFlags const flags, AccountID const id, beast::Journal const j, Issue const &amp;issue)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00234">CreateOffer.cpp:234</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_a59d336027ccb062b2e916e385bd57114"><div class="ttname"><a href="classripple_1_1CreateOffer.html#a59d336027ccb062b2e916e385bd57114">ripple::CreateOffer::preclaim</a></div><div class="ttdeci">static TER preclaim(PreclaimContext const &amp;ctx)</div><div class="ttdoc">Enforce constraints beyond those of the Transactor base class.</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00149">CreateOffer.cpp:149</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_a5ad4cbfda67a13d823588643d8a96264"><div class="ttname"><a href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">ripple::CreateOffer::format_amount</a></div><div class="ttdeci">static std::string format_amount(STAmount const &amp;amount)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00525">CreateOffer.cpp:525</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_a5ad4cbfda67a13d823588643d8a96264"><div class="ttname"><a href="classripple_1_1CreateOffer.html#a5ad4cbfda67a13d823588643d8a96264">ripple::CreateOffer::format_amount</a></div><div class="ttdeci">static std::string format_amount(STAmount const &amp;amount)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00511">CreateOffer.cpp:511</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_a70d0419327b69f60d99eef0b82b73c25"><div class="ttname"><a href="classripple_1_1CreateOffer.html#a70d0419327b69f60d99eef0b82b73c25">ripple::CreateOffer::getFlagsMask</a></div><div class="ttdeci">static std::uint32_t getFlagsMask(PreflightContext const &amp;ctx)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00057">CreateOffer.cpp:57</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_aaa97cf694b007c7c9be9b3d0b939a740"><div class="ttname"><a href="classripple_1_1CreateOffer.html#aaa97cf694b007c7c9be9b3d0b939a740">ripple::CreateOffer::preflight</a></div><div class="ttdeci">static NotTEC preflight(PreflightContext const &amp;ctx)</div><div class="ttdoc">Enforce constraints beyond those of the Transactor base class.</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00069">CreateOffer.cpp:69</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_ab442fb88a4d07d65dc92fbc2746166a3"><div class="ttname"><a href="classripple_1_1CreateOffer.html#ab442fb88a4d07d65dc92fbc2746166a3">ripple::CreateOffer::makeTxConsequences</a></div><div class="ttdeci">static TxConsequences makeTxConsequences(PreflightContext const &amp;ctx)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00036">CreateOffer.cpp:36</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_ab9e0f2e14fa541676412a148b4823f4c"><div class="ttname"><a href="classripple_1_1CreateOffer.html#ab9e0f2e14fa541676412a148b4823f4c">ripple::CreateOffer::applyHybrid</a></div><div class="ttdeci">TER applyHybrid(Sandbox &amp;sb, std::shared_ptr&lt; STLedgerEntry &gt; sleOffer, Keylet const &amp;offer_index, STAmount const &amp;saTakerPays, STAmount const &amp;saTakerGets, std::function&lt; void(SLE::ref, std::optional&lt; uint256 &gt;)&gt; const &amp;setDir)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00534">CreateOffer.cpp:534</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_ae8670d9db3224f61491379bfeaf6719f"><div class="ttname"><a href="classripple_1_1CreateOffer.html#ae8670d9db3224f61491379bfeaf6719f">ripple::CreateOffer::doApply</a></div><div class="ttdeci">TER doApply() override</div><div class="ttdoc">Precondition: fee collection is likely.</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00940">CreateOffer.cpp:940</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_ab9e0f2e14fa541676412a148b4823f4c"><div class="ttname"><a href="classripple_1_1CreateOffer.html#ab9e0f2e14fa541676412a148b4823f4c">ripple::CreateOffer::applyHybrid</a></div><div class="ttdeci">TER applyHybrid(Sandbox &amp;sb, std::shared_ptr&lt; STLedgerEntry &gt; sleOffer, Keylet const &amp;offer_index, STAmount const &amp;saTakerPays, STAmount const &amp;saTakerGets, std::function&lt; void(SLE::ref, std::optional&lt; uint256 &gt;)&gt; const &amp;setDir)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00520">CreateOffer.cpp:520</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_ae8670d9db3224f61491379bfeaf6719f"><div class="ttname"><a href="classripple_1_1CreateOffer.html#ae8670d9db3224f61491379bfeaf6719f">ripple::CreateOffer::doApply</a></div><div class="ttdeci">TER doApply() override</div><div class="ttdoc">Precondition: fee collection is likely.</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00926">CreateOffer.cpp:926</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_aeaf64b9c0dab10a57613cd96eced0ed0"><div class="ttname"><a href="classripple_1_1CreateOffer.html#aeaf64b9c0dab10a57613cd96eced0ed0">ripple::CreateOffer::checkExtraFeatures</a></div><div class="ttdeci">static bool checkExtraFeatures(PreflightContext const &amp;ctx)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00047">CreateOffer.cpp:47</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_af1e3edb1dcc853bf59a5c63f366f29e9"><div class="ttname"><a href="classripple_1_1CreateOffer.html#af1e3edb1dcc853bf59a5c63f366f29e9">ripple::CreateOffer::applyGuts</a></div><div class="ttdeci">std::pair&lt; TER, bool &gt; applyGuts(Sandbox &amp;view, Sandbox &amp;view_cancel)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00582">CreateOffer.cpp:582</a></div></div>
<div class="ttc" id="aclassripple_1_1CreateOffer_html_af1e3edb1dcc853bf59a5c63f366f29e9"><div class="ttname"><a href="classripple_1_1CreateOffer.html#af1e3edb1dcc853bf59a5c63f366f29e9">ripple::CreateOffer::applyGuts</a></div><div class="ttdeci">std::pair&lt; TER, bool &gt; applyGuts(Sandbox &amp;view, Sandbox &amp;view_cancel)</div><div class="ttdef"><b>Definition</b> <a href="CreateOffer_8cpp_source.html#l00568">CreateOffer.cpp:568</a></div></div>
<div class="ttc" id="aclassripple_1_1Issue_html"><div class="ttname"><a href="classripple_1_1Issue.html">ripple::Issue</a></div><div class="ttdoc">A currency issued by an account.</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00032">Issue.h:33</a></div></div>
<div class="ttc" id="aclassripple_1_1Issue_html_a46e4805870b1bad6a8691bed0b8acec8"><div class="ttname"><a href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">ripple::Issue::account</a></div><div class="ttdeci">AccountID account</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00036">Issue.h:36</a></div></div>
<div class="ttc" id="aclassripple_1_1Issue_html_a4b723aa4198e4c630e41de06586e2fe7"><div class="ttname"><a href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">ripple::Issue::currency</a></div><div class="ttdeci">Currency currency</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00035">Issue.h:35</a></div></div>
@@ -1198,7 +1184,6 @@ $(document).ready(function() { init_codefold(0); });
<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#l00301">TER.h:301</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#l00246">TER.h:245</a></div></div>
<div class="ttc" id="anamespaceripple_html_ab48d5d1c4e2695c12f705e9d85fa560d"><div class="ttname"><a href="namespaceripple.html#ab48d5d1c4e2695c12f705e9d85fa560d">ripple::isTesSuccess</a></div><div class="ttdeci">bool isTesSuccess(TER x) noexcept</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00678">TER.h:678</a></div></div>
<div class="ttc" id="anamespaceripple_html_abc53dd05ffa8024fbe0101790a2b78ac"><div class="ttname"><a href="namespaceripple.html#abc53dd05ffa8024fbe0101790a2b78ac">ripple::divRound</a></div><div class="ttdeci">STAmount divRound(STAmount const &amp;v1, STAmount const &amp;v2, Asset const &amp;asset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01722">STAmount.cpp:1722</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac124fe6744b7fe887dec949b56b16d50"><div class="ttname"><a href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">ripple::to_string</a></div><div class="ttdeci">std::string to_string(base_uint&lt; Bits, Tag &gt; const &amp;a)</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00630">base_uint.h:630</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac96824de7714986a7122e5551a2ba470"><div class="ttname"><a href="namespaceripple.html#ac96824de7714986a7122e5551a2ba470">ripple::mulRound</a></div><div class="ttdeci">STAmount mulRound(STAmount const &amp;v1, STAmount const &amp;v2, Asset const &amp;asset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01615">STAmount.cpp:1615</a></div></div>
<div class="ttc" id="anamespaceripple_html_acba9aa7d1101df4ac940c3588972fdea"><div class="ttname"><a href="namespaceripple.html#acba9aa7d1101df4ac940c3588972fdea">ripple::multiplyRound</a></div><div class="ttdeci">STAmount multiplyRound(STAmount const &amp;amount, Rate const &amp;rate, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="Rate2_8cpp_source.html#l00064">Rate2.cpp:64</a></div></div>