From f9fb67e32bf116ec4826a7eb0770f8c18a8977fe Mon Sep 17 00:00:00 2001 From: necklace Date: Tue, 26 Apr 2022 15:39:18 +0800 Subject: [PATCH] Fix the margin call price in UI is wrong mcfr --- app/components/Account/AccountOrders.jsx | 32 +++++++++++++--------- app/components/Blockchain/Asset.jsx | 8 ++++++ app/lib/common/MarketClasses.js | 35 ++++++++++++++---------- app/lib/common/accountHelper.js | 3 ++ app/stores/MarketsStore.js | 9 ++++++ 5 files changed, 60 insertions(+), 27 deletions(-) diff --git a/app/components/Account/AccountOrders.jsx b/app/components/Account/AccountOrders.jsx index 4a44a63b48..65ea68a958 100644 --- a/app/components/Account/AccountOrders.jsx +++ b/app/components/Account/AccountOrders.jsx @@ -67,6 +67,7 @@ class AccountOrders extends React.Component { let base = null; let quote = null; let sqr = null; + let mcfr = null; let feed_price = null; let bitasset_options = null; @@ -103,10 +104,18 @@ class AccountOrders extends React.Component { "maximum_short_squeeze_ratio" ]); + mcfr = base.getIn([ + "bitasset", + "options", + "extensions", + "margin_call_fee_ratio" + ]); + feed_price = new FeedPrice({ priceObject: feedPriceRaw, market_base: marketBaseId, sqr, + mcfr, assets }); @@ -777,19 +786,16 @@ class AccountOrders extends React.Component { } } -AccountOrders = connect( - AccountOrders, - { - listenTo() { - return [SettingsStore]; - }, - getProps() { - return { - marketDirections: SettingsStore.getState().marketDirections, - viewSettings: SettingsStore.getState().viewSettings - }; - } +AccountOrders = connect(AccountOrders, { + listenTo() { + return [SettingsStore]; + }, + getProps() { + return { + marketDirections: SettingsStore.getState().marketDirections, + viewSettings: SettingsStore.getState().viewSettings + }; } -); +}); export default AccountOrders; diff --git a/app/components/Blockchain/Asset.jsx b/app/components/Blockchain/Asset.jsx index fabda90091..98362f343b 100644 --- a/app/components/Blockchain/Asset.jsx +++ b/app/components/Blockchain/Asset.jsx @@ -183,6 +183,13 @@ class Asset extends React.Component { "maximum_short_squeeze_ratio" ]); + let mcfr = this.props.asset.getIn([ + "bitasset", + "options", + "extensions", + "margin_call_fee_ratio" + ]); + let feedPriceRaw = assetUtils.extractRawFeedPrice(this.props.asset); // if there has been no feed price, settlePrice has 0 amount @@ -229,6 +236,7 @@ class Asset extends React.Component { priceObject: feedPriceRaw, market_base: this.props.asset.get("id"), sqr, + mcfr, assets }); diff --git a/app/lib/common/MarketClasses.js b/app/lib/common/MarketClasses.js index ff5f11f022..0144c6e907 100644 --- a/app/lib/common/MarketClasses.js +++ b/app/lib/common/MarketClasses.js @@ -367,13 +367,14 @@ class Price { } class FeedPrice extends Price { - constructor({priceObject, assets, market_base, sqr, real = false}) { + constructor({priceObject, assets, market_base, sqr, mcfr, real = false}) { if ( !priceObject || typeof priceObject !== "object" || !market_base || !assets || - !sqr + !sqr || + !mcfr ) { throw new Error("Invalid FeedPrice inputs"); } @@ -404,6 +405,8 @@ class FeedPrice extends Price { this.sqr = parseInt(sqr, 10) / 1000; this.inverted = inverted; + if (!mcfr) this.mcfr = 0; + else this.mcfr = parseInt(mcfr, 10) / 1000; } getSqueezePrice({real = false} = {}) { @@ -411,12 +414,16 @@ class FeedPrice extends Price { this._squeeze_price = this.clone(); if (this.inverted) { this._squeeze_price.base.amount = Math.floor( - this._squeeze_price.base.amount * this.sqr * 1000 + this._squeeze_price.base.amount * + (this.sqr - this.mcfr) * + 1000 ); this._squeeze_price.quote.amount *= 1000; } else if (!this.inverted) { this._squeeze_price.quote.amount = Math.floor( - this._squeeze_price.quote.amount * this.sqr * 1000 + this._squeeze_price.quote.amount * + (this.sqr - this.mcfr) * + 1000 ); this._squeeze_price.base.amount *= 1000; } @@ -899,25 +906,25 @@ class CallOrder { let orderDebt = order.iSum ? order.debt : orderUseCR - ? order.max_debt_to_cover.getAmount() - : order.amountToReceive().getAmount(); + ? order.max_debt_to_cover.getAmount() + : order.amountToReceive().getAmount(); let newOrderDebt = newOrder.iSum ? newOrder.debt : newOrderUseCR - ? newOrder.max_debt_to_cover.getAmount() - : newOrder.amountToReceive().getAmount(); + ? newOrder.max_debt_to_cover.getAmount() + : newOrder.amountToReceive().getAmount(); /* Determine which collateral values to use */ let orderCollateral = order.iSum ? order.collateral : orderUseCR - ? order.max_collateral_to_sell.getAmount() - : order.amountForSale().getAmount(); + ? order.max_collateral_to_sell.getAmount() + : order.amountForSale().getAmount(); let newOrderCollateral = newOrder.iSum ? newOrder.collateral : newOrderUseCR - ? newOrder.max_collateral_to_sell.getAmount() - : newOrder.amountForSale().getAmount(); + ? newOrder.max_collateral_to_sell.getAmount() + : newOrder.amountForSale().getAmount(); newOrder.debt = newOrderDebt + orderDebt; newOrder.collateral = newOrderCollateral + orderCollateral; @@ -1232,8 +1239,8 @@ class FillOrder { this.className = this.isCall ? "orderHistoryCall" : this.isBid - ? "orderHistoryBid" - : "orderHistoryAsk"; + ? "orderHistoryBid" + : "orderHistoryAsk"; this.time = fill.time && new Date(utils.makeISODateString(fill.time)); this.block = fill.block; this.account = fill.op.account || fill.op.account_id; diff --git a/app/lib/common/accountHelper.js b/app/lib/common/accountHelper.js index e0bb74d557..c65bb2c740 100644 --- a/app/lib/common/accountHelper.js +++ b/app/lib/common/accountHelper.js @@ -73,6 +73,9 @@ function checkMarginStatus(account) { sqr: debtAsset.bitasset.current_feed .maximum_short_squeeze_ratio, + mcfr: + debtAsset.bitasset.options.extensions + .margin_call_fee_ratio, assets: assetsMap }); let current = { diff --git a/app/stores/MarketsStore.js b/app/stores/MarketsStore.js index 4f04dc7561..11d3a3f299 100644 --- a/app/stores/MarketsStore.js +++ b/app/stores/MarketsStore.js @@ -755,6 +755,14 @@ class MarketsStore { "current_feed", "maximum_short_squeeze_ratio" ]); + let mcfr = this[ + this.invertedCalls ? "baseAsset" : "quoteAsset" + ].getIn([ + "bitasset", + "options", + "extensions", + "margin_call_fee_ratio" + ]); this.is_prediction_market = this[ this.invertedCalls ? "baseAsset" : "quoteAsset" @@ -791,6 +799,7 @@ class MarketsStore { priceObject: feedPriceRaw, market_base: this.quoteAsset.get("id"), sqr, + mcfr, assets });