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) } }