This commit is contained in:
mschneider 2023-05-13 16:10:41 +00:00
parent 5ad3daefaf
commit 09592719d2
76 changed files with 205 additions and 138 deletions

View File

@ -1 +1 @@
{"rustc_fingerprint":5112592523311449540,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.65.0 (897e37553 2022-11-02)\nbinary: rustc\ncommit-hash: 897e37553bba8b42751c67658967889d11ecd120\ncommit-date: 2022-11-02\nhost: x86_64-unknown-linux-gnu\nrelease: 1.65.0\nLLVM version: 15.0.0\n","stderr":""},"15697416045686424142":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n","stderr":""},"10376369925670944939":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/runner/.rustup/toolchains/1.65-x86_64-unknown-linux-gnu\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":82438534482926853,"outputs":{"15697416045686424142":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n","stderr":""},"10376369925670944939":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/runner/.rustup/toolchains/1.65-x86_64-unknown-linux-gnu\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":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.65.0 (897e37553 2022-11-02)\nbinary: rustc\ncommit-hash: 897e37553bba8b42751c67658967889d11ecd120\ncommit-date: 2022-11-02\nhost: x86_64-unknown-linux-gnu\nrelease: 1.65.0\nLLVM version: 15.0.0\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

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

View File

@ -1 +1 @@
window.SIDEBAR_ITEMS = {"enum":[["LoanOriginationFeeInstruction",""]],"fn":[["emit_perp_balances",""]],"struct":[["AccountBuybackFeesWithMngoLog",""],["DeactivatePerpPositionLog",""],["DeactivateTokenPositionLog",""],["DepositLog",""],["FillLog",""],["FillLogV2",""],["FilledPerpOrderLog",""],["FlashLoanLog",""],["FlashLoanTokenDetail",""],["PerpBalanceLog",""],["PerpForceClosePositionLog",""],["PerpLiqBankruptcyLog",""],["PerpLiqBaseOrPositivePnlLog",""],["PerpLiqNegativePnlOrBankruptcyLog",""],["PerpMarketMetaDataLog",""],["PerpSettleFeesLog",""],["PerpSettlePnlLog",""],["PerpUpdateFundingLog",""],["PerpUpdateFundingLogV2",""],["Serum3OpenOrdersBalanceLog",""],["Serum3OpenOrdersBalanceLogV2",""],["Serum3RegisterMarketLog",""],["TokenBalanceLog",""],["TokenForceCloseBorrowsWithTokenLog",""],["TokenLiqBankruptcyLog",""],["TokenLiqWithTokenLog",""],["TokenMetaDataLog",""],["UpdateIndexLog",""],["UpdateRateLog",""],["WithdrawLoanOriginationFeeLog",""],["WithdrawLog",""]]};
window.SIDEBAR_ITEMS = {"enum":[["LoanOriginationFeeInstruction",""]],"fn":[["emit_perp_balances",""]],"struct":[["AccountBuybackFeesWithMngoLog",""],["DeactivatePerpPositionLog",""],["DeactivateTokenPositionLog",""],["DepositLog",""],["FillLog",""],["FillLogV2",""],["FilledPerpOrderLog",""],["FlashLoanLog",""],["FlashLoanTokenDetail",""],["PerpBalanceLog",""],["PerpForceClosePositionLog",""],["PerpLiqBankruptcyLog",""],["PerpLiqBaseOrPositivePnlLog",""],["PerpLiqNegativePnlOrBankruptcyLog",""],["PerpMarketMetaDataLog",""],["PerpSettleFeesLog",""],["PerpSettlePnlLog",""],["PerpTakerTradeLog",""],["PerpUpdateFundingLog",""],["PerpUpdateFundingLogV2",""],["Serum3OpenOrdersBalanceLog",""],["Serum3OpenOrdersBalanceLogV2",""],["Serum3RegisterMarketLog",""],["TokenBalanceLog",""],["TokenForceCloseBorrowsWithTokenLog",""],["TokenLiqBankruptcyLog",""],["TokenLiqWithTokenLog",""],["TokenMetaDataLog",""],["UpdateIndexLog",""],["UpdateRateLog",""],["WithdrawLoanOriginationFeeLog",""],["WithdrawLog",""]]};

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

View File

@ -421,6 +421,18 @@
<span id="421">421</span>
<span id="422">422</span>
<span id="423">423</span>
<span id="424">424</span>
<span id="425">425</span>
<span id="426">426</span>
<span id="427">427</span>
<span id="428">428</span>
<span id="429">429</span>
<span id="430">430</span>
<span id="431">431</span>
<span id="432">432</span>
<span id="433">433</span>
<span id="434">434</span>
<span id="435">435</span>
</pre><pre class="rust"><code><span class="kw">use crate</span>::{
accounts_ix::FlashLoanType,
state::{OracleType, PerpMarket, PerpPosition},
@ -820,6 +832,18 @@
<span class="kw">pub </span>seq_num: u64,
}
<span class="attribute">#[event]
</span><span class="kw">pub struct </span>PerpTakerTradeLog {
<span class="kw">pub </span>mango_group: Pubkey,
<span class="kw">pub </span>mango_account: Pubkey,
<span class="kw">pub </span>perp_market_index: u16,
<span class="kw">pub </span>taker_side: u8,
<span class="kw">pub </span>total_base_lots_taken: i64,
<span class="kw">pub </span>total_quote_lots_taken: i64, <span class="comment">// exclusive fees paid
</span><span class="kw">pub </span>taker_fees_paid: i128, <span class="comment">// in native quote units
</span><span class="kw">pub </span>fee_penalty: i128, <span class="comment">// in native quote units
</span>}
<span class="attribute">#[event]
</span><span class="kw">pub struct </span>PerpForceClosePositionLog {
<span class="kw">pub </span>mango_group: Pubkey,

View File

@ -406,7 +406,19 @@
<span id="406">406</span>
<span id="407">407</span>
<span id="408">408</span>
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">crate</span>::logs::FilledPerpOrderLog;
<span id="409">409</span>
<span id="410">410</span>
<span id="411">411</span>
<span id="412">412</span>
<span id="413">413</span>
<span id="414">414</span>
<span id="415">415</span>
<span id="416">416</span>
<span id="417">417</span>
<span id="418">418</span>
<span id="419">419</span>
<span id="420">420</span>
</pre><pre class="rust"><code><span class="kw">use </span><span class="kw">crate</span>::logs::{FilledPerpOrderLog, PerpTakerTradeLog};
<span class="kw">use </span><span class="kw">crate</span>::state::MangoAccountRefMut;
<span class="kw">use crate</span>::{
error::<span class="kw-2">*</span>,
@ -472,9 +484,11 @@
</span><span class="kw">let </span>order_id = market.gen_order_id(side, price_data);
<span class="comment">// IOC orders have a fee penalty applied regardless of match
</span><span class="kw">if </span>order.needs_penalty_fee() {
apply_penalty(market, mango_account)<span class="question-mark">?</span>;
}
</span><span class="kw">let </span>fee_penalty = <span class="kw">if </span>order.needs_penalty_fee() {
apply_penalty(market, mango_account)<span class="question-mark">?
</span>} <span class="kw">else </span>{
I80F48::ZERO
};
<span class="kw">let </span>perp_position = mango_account.perp_position_mut(market.perp_market_index)<span class="question-mark">?</span>;
@ -573,7 +587,7 @@
<span class="macro">emit!</span>(FilledPerpOrderLog {
mango_group: market.group.key(),
perp_market_index: market.perp_market_index,
seq_num: seq_num,
seq_num,
});
}
<span class="kw">let </span>total_quote_lots_taken = order.max_quote_lots - remaining_quote_lots;
@ -585,7 +599,17 @@
// realized when the fill event gets executed
</span><span class="kw">if </span>total_quote_lots_taken &gt; <span class="number">0 </span>|| total_base_lots_taken &gt; <span class="number">0 </span>{
perp_position.add_taker_trade(side, total_base_lots_taken, total_quote_lots_taken);
apply_fees(market, mango_account, total_quote_lots_taken)<span class="question-mark">?</span>;
<span class="kw">let </span>taker_fees_paid = apply_fees(market, mango_account, total_quote_lots_taken)<span class="question-mark">?</span>;
<span class="macro">emit!</span>(PerpTakerTradeLog {
mango_group: market.group.key(),
mango_account: <span class="kw-2">*</span>mango_account_pk,
perp_market_index: market.perp_market_index,
taker_side: side <span class="kw">as </span>u8,
total_base_lots_taken,
total_quote_lots_taken,
taker_fees_paid: taker_fees_paid.to_bits(),
fee_penalty: fee_penalty.to_bits(),
});
}
<span class="comment">// Apply changes to matched asks (handles invalidate on delete!)
@ -773,7 +797,7 @@
market: <span class="kw-2">&amp;mut </span>PerpMarket,
account: <span class="kw-2">&amp;mut </span>MangoAccountRefMut,
quote_lots: i64,
) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
) -&gt; <span class="prelude-ty">Result</span>&lt;I80F48&gt; {
<span class="kw">let </span>quote_native = I80F48::from_num(market.quote_lot_size * quote_lots);
<span class="comment">// The maker fees apply to the maker&#39;s account only when the fill event is consumed.
@ -799,11 +823,11 @@
// breaks assumptions.
</span>market.fees_accrued += taker_fees + maker_fees;
<span class="prelude-val">Ok</span>(())
<span class="prelude-val">Ok</span>(taker_fees)
}
<span class="doccomment">/// Applies a fixed penalty fee to the account, and update the market&#39;s fees_accrued
</span><span class="kw">fn </span>apply_penalty(market: <span class="kw-2">&amp;mut </span>PerpMarket, account: <span class="kw-2">&amp;mut </span>MangoAccountRefMut) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
</span><span class="kw">fn </span>apply_penalty(market: <span class="kw-2">&amp;mut </span>PerpMarket, account: <span class="kw-2">&amp;mut </span>MangoAccountRefMut) -&gt; <span class="prelude-ty">Result</span>&lt;I80F48&gt; {
<span class="kw">let </span>fee_penalty = I80F48::from_num(market.fee_penalty);
account
.fixed
@ -812,7 +836,7 @@
<span class="kw">let </span>perp_position = account.perp_position_mut(market.perp_market_index)<span class="question-mark">?</span>;
perp_position.record_trading_fee(fee_penalty);
market.fees_accrued += fee_penalty;
<span class="prelude-val">Ok</span>(())
<span class="prelude-val">Ok</span>(fee_penalty)
}
</code></pre></div>
</section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="mango_v4" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.65.0 (897e37553 2022-11-02)" ></div></body></html>

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