Skip to content

Commit 653bed2

Browse files
committed
Update CalculateUsdMarketValue to return rate and consider mints beyond core
1 parent c9537dc commit 653bed2

File tree

5 files changed

+22
-9
lines changed

5 files changed

+22
-9
lines changed

pkg/code/async/account/gift_card.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ func insertAutoReturnIntentRecord(ctx context.Context, data code_data.Provider,
305305
return err
306306
}
307307

308-
usdMarketValue, err := currency_util.CalculateUsdMarketValue(ctx, data, mintAccount, giftCardIssuedIntent.SendPublicPaymentMetadata.Quantity, time.Now())
308+
usdMarketValue, _, err := currency_util.CalculateUsdMarketValue(ctx, data, mintAccount, giftCardIssuedIntent.SendPublicPaymentMetadata.Quantity, time.Now())
309309
if err != nil {
310310
return err
311311
}

pkg/code/async/geyser/external_deposit.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ func processPotentialExternalDepositIntoVm(ctx context.Context, data code_data.P
308308
return errors.Wrap(err, "invalid owner account")
309309
}
310310

311-
usdMarketValue, err := currency_util.CalculateUsdMarketValue(ctx, data, common.CoreMintAccount, uint64(deltaQuarksIntoOmnibus), time.Now())
311+
usdMarketValue, _, err := currency_util.CalculateUsdMarketValue(ctx, data, common.CoreMintAccount, uint64(deltaQuarksIntoOmnibus), time.Now())
312312
if err != nil {
313313
return errors.Wrap(err, "error calculating usd market value")
314314
}

pkg/code/currency/usd_market_value.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,31 @@ import (
77
"github.com/code-payments/code-server/pkg/code/common"
88
code_data "github.com/code-payments/code-server/pkg/code/data"
99
currency_lib "github.com/code-payments/code-server/pkg/currency"
10+
"github.com/code-payments/code-server/pkg/solana/currencycreator"
1011
)
1112

1213
// CalculateUsdMarketValue calculates the current USD market value of a crypto
1314
// amount in quarks.
14-
func CalculateUsdMarketValue(ctx context.Context, data code_data.Provider, mint *common.Account, quarks uint64, at time.Time) (float64, error) {
15+
func CalculateUsdMarketValue(ctx context.Context, data code_data.Provider, mint *common.Account, quarks uint64, at time.Time) (float64, float64, error) {
1516
usdExchangeRecord, err := data.GetExchangeRate(ctx, currency_lib.USD, at)
1617
if err != nil {
17-
return 0, err
18+
return 0, 0, err
1819
}
1920

21+
pricePerCoreMint := 1.0
22+
if mint.PublicKey().ToBase58() != common.CoreMintAccount.PublicKey().ToBase58() {
23+
reserveRecord, err := data.GetCurrencyReserveAtTime(ctx, mint.PublicKey().ToBase58(), at)
24+
if err != nil {
25+
return 0, 0, err
26+
}
27+
28+
pricePerCoreMint, _ = currencycreator.EstimateCurrentPrice(reserveRecord.SupplyFromBonding).Float64()
29+
}
30+
31+
rate := pricePerCoreMint * usdExchangeRecord.Rate
32+
2033
quarksPerUnit := common.GetMintQuarksPerUnit(mint)
2134
units := float64(quarks) / float64(quarksPerUnit)
2235
marketValue := usdExchangeRecord.Rate * units
23-
return marketValue, nil
36+
return marketValue, rate, nil
2437
}

pkg/code/server/transaction/airdrop.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func (s *transactionServer) airdrop(ctx context.Context, intentId string, owner
214214
coreMintAmount := nativeAmount / exchangeRateRecord.Rate
215215
quarkAmount := uint64(coreMintAmount*float64(common.CoreMintQuarksPerUnit)) + additionalQuarks
216216

217-
usdMarketValue, err := currency_util.CalculateUsdMarketValue(ctx, s.data, common.CoreMintAccount, quarkAmount, currency_util.GetLatestExchangeRateTime())
217+
usdMarketValue, _, err := currency_util.CalculateUsdMarketValue(ctx, s.data, common.CoreMintAccount, quarkAmount, currency_util.GetLatestExchangeRateTime())
218218
if err != nil {
219219
log.WithError(err).Warn("failure calculating usd market value")
220220
return nil, err

pkg/code/server/transaction/intent_handler.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ func (h *SendPublicPaymentIntentHandler) PopulateMetadata(ctx context.Context, i
355355

356356
exchangeData := typedProtoMetadata.ExchangeData
357357

358-
usdMarketValue, err := currency_util.CalculateUsdMarketValue(ctx, h.data, mint, exchangeData.Quarks, currency_util.GetLatestExchangeRateTime())
358+
usdMarketValue, _, err := currency_util.CalculateUsdMarketValue(ctx, h.data, mint, exchangeData.Quarks, currency_util.GetLatestExchangeRateTime())
359359
if err != nil {
360360
return err
361361
}
@@ -893,7 +893,7 @@ func (h *ReceivePaymentsPubliclyIntentHandler) PopulateMetadata(ctx context.Cont
893893
}
894894
h.cachedGiftCardIssuedIntentRecord = giftCardIssuedIntentRecord
895895

896-
usdMarketValue, err := currency_util.CalculateUsdMarketValue(ctx, h.data, mint, typedProtoMetadata.Quarks, currency_util.GetLatestExchangeRateTime())
896+
usdMarketValue, _, err := currency_util.CalculateUsdMarketValue(ctx, h.data, mint, typedProtoMetadata.Quarks, currency_util.GetLatestExchangeRateTime())
897897
if err != nil {
898898
return err
899899
}
@@ -1203,7 +1203,7 @@ func (h *PublicDistributionIntentHandler) PopulateMetadata(ctx context.Context,
12031203
totalQuarks += distribution.Quarks
12041204
}
12051205

1206-
usdMarketValue, err := currency_util.CalculateUsdMarketValue(ctx, h.data, mint, totalQuarks, currency_util.GetLatestExchangeRateTime())
1206+
usdMarketValue, _, err := currency_util.CalculateUsdMarketValue(ctx, h.data, mint, totalQuarks, currency_util.GetLatestExchangeRateTime())
12071207
if err != nil {
12081208
return err
12091209
}

0 commit comments

Comments
 (0)