Compare commits
3 Commits
c2cfd0fe44
...
09954d967f
| Author | SHA1 | Date | |
|---|---|---|---|
| 09954d967f | |||
| 465b3b5604 | |||
| aacea81397 |
@ -39,5 +39,7 @@ DEFAULT_MPESA_ASSET=cUSD
|
|||||||
MPESA_BEARER_TOKEN=eyJeSIsInRcCI6IkpXVCJ.yJwdWJsaWNLZXkiOiIwrrrrrr
|
MPESA_BEARER_TOKEN=eyJeSIsInRcCI6IkpXVCJ.yJwdWJsaWNLZXkiOiIwrrrrrr
|
||||||
MPESA_ONRAMP_BASE=https://pretium.v1.grassecon.net
|
MPESA_ONRAMP_BASE=https://pretium.v1.grassecon.net
|
||||||
|
|
||||||
# Known stable voucher addresses (USDT, USDm)
|
# Known stable voucher addresses (USDm, USD₮)
|
||||||
STABLE_VOUCHER_ADDRESSES=0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e,0x765DE816845861e75A25fCA122bb6898B8B1282a
|
STABLE_VOUCHER_ADDRESSES=0x765DE816845861e75A25fCA122bb6898B8B1282a,0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e
|
||||||
|
DEFAULT_STABLE_VOUCHER_ADDRESS=0x765DE816845861e75A25fCA122bb6898B8B1282a
|
||||||
|
DEFAULT_STABLE_VOUCHER_DECIMALS=18
|
||||||
|
|||||||
@ -142,3 +142,11 @@ func StableVoucherAddresses() []string {
|
|||||||
|
|
||||||
return parsed
|
return parsed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DefaultStableVoucherAddress() string {
|
||||||
|
return env.GetEnv("DEFAULT_STABLE_VOUCHER_ADDRESS", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func DefaultStableVoucherDecimals() string {
|
||||||
|
return env.GetEnv("DEFAULT_STABLE_VOUCHER_DECIMALS", "")
|
||||||
|
}
|
||||||
|
|||||||
@ -206,7 +206,7 @@ func (h *MenuHandlers) CalculateCreditAndDebt(ctx context.Context, sym string, i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Credit calculation: How much Active Token (such as ALF) that can be swapped for a stable coin
|
// Credit calculation: How much Active Token that can be swapped for a stable coin
|
||||||
// + any stables sendable to Pretium (in KSH value)
|
// + any stables sendable to Pretium (in KSH value)
|
||||||
scaledCredit := "0"
|
scaledCredit := "0"
|
||||||
|
|
||||||
@ -214,10 +214,10 @@ func (h *MenuHandlers) CalculateCreditAndDebt(ctx context.Context, sym string, i
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
// do a swap quote to get the max I can get when I swap my active voucher
|
// do a swap quote for default stable coin from active voucher
|
||||||
// for a stable coin (say I can get 4 USD). Then I add that to my exisitng
|
stableAddress := config.DefaultStableVoucherAddress()
|
||||||
// stable coins and covert to Ksh
|
stableDecimals := config.DefaultStableVoucherDecimals()
|
||||||
stableAddress := stableAddresses[0]
|
|
||||||
r, err := h.accountService.GetPoolSwapQuote(ctx, finalAmountStr, string(publicKey), string(activeAddress), string(activePoolAddress), stableAddress)
|
r, err := h.accountService.GetPoolSwapQuote(ctx, finalAmountStr, string(publicKey), string(activeAddress), string(activePoolAddress), stableAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
flag_api_call_error, _ := h.flagManager.GetFlag("flag_api_call_error")
|
flag_api_call_error, _ := h.flagManager.GetFlag("flag_api_call_error")
|
||||||
@ -227,7 +227,7 @@ func (h *MenuHandlers) CalculateCreditAndDebt(ctx context.Context, sym string, i
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
finalQuote := store.ScaleDownBalance(r.OutValue, "6")
|
finalQuote := store.ScaleDownBalance(r.OutValue, stableDecimals)
|
||||||
|
|
||||||
scaledCredit = store.AddDecimalStrings(scaledCredit, finalQuote)
|
scaledCredit = store.AddDecimalStrings(scaledCredit, finalQuote)
|
||||||
|
|
||||||
|
|||||||
@ -161,7 +161,7 @@ func (h *MenuHandlers) ConfirmDebtRemoval(ctx context.Context, sym string, input
|
|||||||
userStore := h.userdataStore
|
userStore := h.userdataStore
|
||||||
|
|
||||||
// Fetch session data
|
// Fetch session data
|
||||||
_, _, activeSym, activeAddress, publicKey, _, err := h.getSessionData(ctx, sessionId)
|
_, _, activeSym, activeAddress, publicKey, activeDecimal, err := h.getSessionData(ctx, sessionId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
@ -172,12 +172,19 @@ func (h *MenuHandlers) ConfirmDebtRemoval(ctx context.Context, sym string, input
|
|||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
swapData, err := store.ReadSwapPreviewData(ctx, userStore, sessionId)
|
// Resolve active pool
|
||||||
|
activePoolAddress, _, err := h.resolveActivePoolDetails(ctx, sessionId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
maxValue, err := strconv.ParseFloat(swapData.ActiveSwapMaxAmount, 64)
|
swapMaxAmount, err := userStore.ReadEntry(ctx, sessionId, storedb.DATA_ACTIVE_SWAP_MAX_AMOUNT)
|
||||||
|
if err != nil {
|
||||||
|
logg.ErrorCtxf(ctx, "failed to read swapMaxAmount entry with", "key", storedb.DATA_ACTIVE_SWAP_MAX_AMOUNT, "error", err)
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
|
||||||
|
maxValue, err := strconv.ParseFloat(string(swapMaxAmount), 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logg.ErrorCtxf(ctx, "Failed to convert the swapMaxAmount to a float", "error", err)
|
logg.ErrorCtxf(ctx, "Failed to convert the swapMaxAmount to a float", "error", err)
|
||||||
return res, err
|
return res, err
|
||||||
@ -191,7 +198,7 @@ func (h *MenuHandlers) ConfirmDebtRemoval(ctx context.Context, sym string, input
|
|||||||
}
|
}
|
||||||
|
|
||||||
var finalAmountStr string
|
var finalAmountStr string
|
||||||
if inputStr == swapData.ActiveSwapMaxAmount {
|
if inputStr == string(swapMaxAmount) {
|
||||||
finalAmountStr = string(payDebtVoucher.Balance)
|
finalAmountStr = string(payDebtVoucher.Balance)
|
||||||
} else {
|
} else {
|
||||||
finalAmountStr, err = store.ParseAndScaleAmount(inputStr, payDebtVoucher.TokenDecimals)
|
finalAmountStr, err = store.ParseAndScaleAmount(inputStr, payDebtVoucher.TokenDecimals)
|
||||||
@ -207,7 +214,7 @@ func (h *MenuHandlers) ConfirmDebtRemoval(ctx context.Context, sym string, input
|
|||||||
}
|
}
|
||||||
|
|
||||||
// call the API to get the quote
|
// call the API to get the quote
|
||||||
r, err := h.accountService.GetPoolSwapQuote(ctx, finalAmountStr, string(publicKey), payDebtVoucher.TokenAddress, swapData.ActivePoolAddress, string(activeAddress))
|
r, err := h.accountService.GetPoolSwapQuote(ctx, finalAmountStr, string(publicKey), payDebtVoucher.TokenAddress, string(activePoolAddress), string(activeAddress))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
flag_api_call_error, _ := h.flagManager.GetFlag("flag_api_call_error")
|
flag_api_call_error, _ := h.flagManager.GetFlag("flag_api_call_error")
|
||||||
res.FlagSet = append(res.FlagSet, flag_api_call_error)
|
res.FlagSet = append(res.FlagSet, flag_api_call_error)
|
||||||
@ -216,8 +223,8 @@ func (h *MenuHandlers) ConfirmDebtRemoval(ctx context.Context, sym string, input
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scale down the quoted amount
|
// Scale down the quoted amount (for the AT)
|
||||||
quoteAmountStr := store.ScaleDownBalance(r.OutValue, swapData.ActiveSwapFromDecimal)
|
quoteAmountStr := store.ScaleDownBalance(r.OutValue, string(activeDecimal))
|
||||||
|
|
||||||
// Format to 2 decimal places
|
// Format to 2 decimal places
|
||||||
qouteStr, _ := store.TruncateDecimalString(string(quoteAmountStr), 2)
|
qouteStr, _ := store.TruncateDecimalString(string(quoteAmountStr), 2)
|
||||||
@ -272,17 +279,18 @@ func (h *MenuHandlers) InitiatePayDebt(ctx context.Context, sym string, input []
|
|||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
swapData, err := store.ReadSwapPreviewData(ctx, userStore, sessionId)
|
|
||||||
if err != nil {
|
|
||||||
return res, err
|
|
||||||
}
|
|
||||||
|
|
||||||
swapAmount, err := userStore.ReadEntry(ctx, sessionId, storedb.DATA_ACTIVE_SWAP_AMOUNT)
|
swapAmount, err := userStore.ReadEntry(ctx, sessionId, storedb.DATA_ACTIVE_SWAP_AMOUNT)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logg.ErrorCtxf(ctx, "failed to read swapAmount entry with", "key", storedb.DATA_ACTIVE_SWAP_AMOUNT, "error", err)
|
logg.ErrorCtxf(ctx, "failed to read swapAmount entry with", "key", storedb.DATA_ACTIVE_SWAP_AMOUNT, "error", err)
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
debtQuotedAmount, err := userStore.ReadEntry(ctx, sessionId, storedb.DATA_TEMPORARY_VALUE)
|
||||||
|
if err != nil {
|
||||||
|
logg.ErrorCtxf(ctx, "failed to read debtQuotedAmount entry with", "key", storedb.DATA_TEMPORARY_VALUE, "error", err)
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
|
||||||
swapAmountStr := string(swapAmount)
|
swapAmountStr := string(swapAmount)
|
||||||
|
|
||||||
// Call the poolSwap API
|
// Call the poolSwap API
|
||||||
@ -300,7 +308,7 @@ func (h *MenuHandlers) InitiatePayDebt(ctx context.Context, sym string, input []
|
|||||||
|
|
||||||
res.Content = l.Get(
|
res.Content = l.Get(
|
||||||
"Your request has been sent. You will receive an SMS when your debt of %s %s has been removed from %s.",
|
"Your request has been sent. You will receive an SMS when your debt of %s %s has been removed from %s.",
|
||||||
swapData.TemporaryValue,
|
string(debtQuotedAmount),
|
||||||
string(activeSym),
|
string(activeSym),
|
||||||
activePoolName,
|
activePoolName,
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user