From 46ff7c87614e6a94513418698cd6e9c7fa23c483 Mon Sep 17 00:00:00 2001 From: jeffyanta Date: Sun, 25 Jan 2026 18:53:01 -0500 Subject: [PATCH] Fix USD market value calculation for public payment intents --- ocp/rpc/transaction/intent_handler.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ocp/rpc/transaction/intent_handler.go b/ocp/rpc/transaction/intent_handler.go index ebe157e..80e7a67 100644 --- a/ocp/rpc/transaction/intent_handler.go +++ b/ocp/rpc/transaction/intent_handler.go @@ -400,6 +400,7 @@ func (h *SendPublicPaymentIntentHandler) PopulateMetadata(ctx context.Context, i var nativeAmount float64 var exchangeRate float64 var quarks uint64 + var usdMarketValue float64 switch typed := typedProtoMetadata.ExchangeData.(type) { case *transactionpb.SendPublicPaymentMetadata_ClientExchangeData: currencyCode = currency_lib.Code(typed.ClientExchangeData.CoreMintFiatExchangeRate.ExchangeRate.CurrencyCode) @@ -410,20 +411,23 @@ func (h *SendPublicPaymentIntentHandler) PopulateMetadata(ctx context.Context, i exchangeRate = currency_util.CalculateExchangeRate(mint, typed.ClientExchangeData.Quarks, typed.ClientExchangeData.NativeAmount) } quarks = typed.ClientExchangeData.Quarks + usdMarketValue, err = currency_util.CalculateUsdMarketValueFromFiatAmount(nativeAmount, typed.ClientExchangeData.CoreMintFiatExchangeRate.ExchangeRate.ExchangeRate) + if err != nil { + return err + } case *transactionpb.SendPublicPaymentMetadata_ServerExchangeData: // todo: deprecate this flow currencyCode = currency_lib.Code(typed.ServerExchangeData.Currency) nativeAmount = typed.ServerExchangeData.NativeAmount exchangeRate = typed.ServerExchangeData.ExchangeRate quarks = typed.ServerExchangeData.Quarks + usdMarketValue, err = currency_util.CalculateUsdMarketValueFromTokenAmount(ctx, h.data, mint, quarks, currency_util.GetLatestExchangeRateTime()) + if err != nil { + return err + } default: return NewIntentDeniedError("client exchange data not provided") } - usdMarketValue, err := currency_util.CalculateUsdMarketValueFromFiatAmount(nativeAmount, exchangeRate) - if err != nil { - return err - } - destination, err := common.NewAccountFromProto(typedProtoMetadata.Destination) if err != nil { return err