This commit is contained in:
ckamm 2023-12-27 09:08:37 +00:00
parent 1d46444989
commit a8db90f48b
67 changed files with 247 additions and 128 deletions

View File

@ -1 +1 @@
{"rustc_fingerprint":2477091588561681078,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.69.0 (84c898d65 2023-04-16)\nbinary: rustc\ncommit-hash: 84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc\ncommit-date: 2023-04-16\nhost: x86_64-unknown-linux-gnu\nrelease: 1.69.0\nLLVM version: 15.0.7\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/runner/.rustup/toolchains/1.69-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}
{"rustc_fingerprint":8092119511546659274,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.69.0 (84c898d65 2023-04-16)\nbinary: rustc\ncommit-hash: 84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc\ncommit-date: 2023-04-16\nhost: x86_64-unknown-linux-gnu\nrelease: 1.69.0\nLLVM version: 15.0.7\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/runner/.rustup/toolchains/1.69-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -407,6 +407,58 @@
<a href="#407" id="407">407</a>
<a href="#408" id="408">408</a>
<a href="#409" id="409">409</a>
<a href="#410" id="410">410</a>
<a href="#411" id="411">411</a>
<a href="#412" id="412">412</a>
<a href="#413" id="413">413</a>
<a href="#414" id="414">414</a>
<a href="#415" id="415">415</a>
<a href="#416" id="416">416</a>
<a href="#417" id="417">417</a>
<a href="#418" id="418">418</a>
<a href="#419" id="419">419</a>
<a href="#420" id="420">420</a>
<a href="#421" id="421">421</a>
<a href="#422" id="422">422</a>
<a href="#423" id="423">423</a>
<a href="#424" id="424">424</a>
<a href="#425" id="425">425</a>
<a href="#426" id="426">426</a>
<a href="#427" id="427">427</a>
<a href="#428" id="428">428</a>
<a href="#429" id="429">429</a>
<a href="#430" id="430">430</a>
<a href="#431" id="431">431</a>
<a href="#432" id="432">432</a>
<a href="#433" id="433">433</a>
<a href="#434" id="434">434</a>
<a href="#435" id="435">435</a>
<a href="#436" id="436">436</a>
<a href="#437" id="437">437</a>
<a href="#438" id="438">438</a>
<a href="#439" id="439">439</a>
<a href="#440" id="440">440</a>
<a href="#441" id="441">441</a>
<a href="#442" id="442">442</a>
<a href="#443" id="443">443</a>
<a href="#444" id="444">444</a>
<a href="#445" id="445">445</a>
<a href="#446" id="446">446</a>
<a href="#447" id="447">447</a>
<a href="#448" id="448">448</a>
<a href="#449" id="449">449</a>
<a href="#450" id="450">450</a>
<a href="#451" id="451">451</a>
<a href="#452" id="452">452</a>
<a href="#453" id="453">453</a>
<a href="#454" id="454">454</a>
<a href="#455" id="455">455</a>
<a href="#456" id="456">456</a>
<a href="#457" id="457">457</a>
<a href="#458" id="458">458</a>
<a href="#459" id="459">459</a>
<a href="#460" id="460">460</a>
<a href="#461" id="461">461</a>
</pre><pre class="rust"><code><span class="kw">use </span>anchor_lang::prelude::<span class="kw-2">*</span>;
<span class="kw">use </span>num_enum::{IntoPrimitive, TryFromPrimitive};
<span class="kw">use </span>static_assertions::const_assert_eq;
@ -589,6 +641,58 @@
}
<span class="prelude-val">None
</span>}
<span class="doccomment">/// Walk up the book given base units and return the amount in quote lots an order would
/// be filled at. If not enough liquidity is on book, return None
</span><span class="kw">pub fn </span>matched_amount(
<span class="kw-2">&amp;</span><span class="self">self</span>,
quantity: i64,
now_ts: u64,
oracle_price_lots: i64,
) -&gt; <span class="prelude-ty">Option</span>&lt;i64&gt; {
<span class="kw">if </span>quantity &lt;= <span class="number">0 </span>{
<span class="kw">return </span><span class="prelude-val">None</span>;
}
<span class="kw">let </span><span class="kw-2">mut </span>sum_qty: i64 = <span class="number">0</span>;
<span class="kw">let </span><span class="kw-2">mut </span>sum_amt: i64 = <span class="number">0</span>;
<span class="kw">for </span>order <span class="kw">in </span><span class="self">self</span>.iter_valid(now_ts, oracle_price_lots) {
sum_qty += order.node.quantity;
sum_amt += order.node.quantity * order.price_lots;
<span class="kw">let </span>extra_qty = sum_qty - quantity;
<span class="kw">if </span>extra_qty &gt;= <span class="number">0 </span>{
sum_amt -= extra_qty * order.price_lots;
<span class="kw">return </span><span class="prelude-val">Some</span>(sum_amt);
}
}
<span class="prelude-val">None
</span>}
<span class="doccomment">/// Walk up the book given quote units and return the quantity in base lots
/// an order would need to request to match at least the requested amount.
/// If not enough liquidity is on book, return None
</span><span class="kw">pub fn </span>matched_quantity(
<span class="kw-2">&amp;</span><span class="self">self</span>,
amount: i64,
now_ts: u64,
oracle_price_lots: i64,
) -&gt; <span class="prelude-ty">Option</span>&lt;i64&gt; {
<span class="kw">if </span>amount &lt;= <span class="number">0 </span>{
<span class="kw">return </span><span class="prelude-val">None</span>;
}
<span class="kw">let </span><span class="kw-2">mut </span>sum_qty: i64 = <span class="number">0</span>;
<span class="kw">let </span><span class="kw-2">mut </span>sum_amt: i64 = <span class="number">0</span>;
<span class="kw">for </span>order <span class="kw">in </span><span class="self">self</span>.iter_valid(now_ts, oracle_price_lots) {
sum_qty += order.node.quantity;
sum_amt += order.node.quantity * order.price_lots;
<span class="kw">let </span>extra_amt = sum_amt - amount;
<span class="kw">if </span>extra_amt &gt;= <span class="number">0 </span>{
<span class="comment">// adding n-1 before dividing through n to force rounding up
</span>sum_qty -= (extra_amt + order.price_lots - <span class="number">1</span>) / order.price_lots;
<span class="kw">return </span><span class="prelude-val">Some</span>(sum_qty);
}
}
<span class="prelude-val">None
</span>}
}
<span class="attr">#[cfg(test)]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long