From e751121402a0b1e122fa9d7f88093268a90df8be Mon Sep 17 00:00:00 2001 From: Jeremy Letang Date: Fri, 17 Nov 2023 10:45:11 +0000 Subject: [PATCH] Merge pull request #10122 from vegaprotocol/estimate-position-isolated-fix Perps: check both funding payment and rate are non-zero before including pending funding payment in PositionEstimate --- .spelling | 2 ++ CHANGELOG.md | 1 + datanode/api/trading_data_v2.go | 6 +++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.spelling b/.spelling index 533d210b07..7726adfc7d 100644 --- a/.spelling +++ b/.spelling @@ -85,6 +85,8 @@ mutexes nodewallet notarising OpenRPC +perp +perps phish Prometheus proto diff --git a/CHANGELOG.md b/CHANGELOG.md index cd24bdd8f5..5df0fa760a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - [9940](https://github.com/vegaprotocol/vega/issues/9940) - Do not assume stop order is valid when generating ids up front. - [10103](https://github.com/vegaprotocol/vega/issues/10103) - List ledgers `API` returns bad error when filtering by transfer type only. +- [10121](https://github.com/vegaprotocol/vega/issues/10121) - Assure `EstimatePosition` API works correctly with sparse perps data ## 0.73.4 diff --git a/datanode/api/trading_data_v2.go b/datanode/api/trading_data_v2.go index 486eb5c7f8..66d8d30aca 100644 --- a/datanode/api/trading_data_v2.go +++ b/datanode/api/trading_data_v2.go @@ -3243,7 +3243,11 @@ func (t *TradingDataServiceV2) EstimatePosition(ctx context.Context, req *v2.Est if err != nil { return nil, formatE(fmt.Errorf("can't parse funding payment from perpetual product data: %s", perpData.FundingPayment), err) } - if !fundingPayment.IsZero() { + fundingRate, err := num.DecimalFromString(perpData.FundingRate) + if err != nil { + return nil, formatE(fmt.Errorf("can't parse funding rate from perpetual product data: %s", perpData.FundingRate), err) + } + if !fundingPayment.IsZero() && !fundingRate.IsZero() { marginFactorScaledFundingPaymentPerUnitPosition = factor.Mul(fundingPayment) } }