scale down the balance according to the decimals
This commit is contained in:
		
							parent
							
								
									b40ad78294
								
							
						
					
					
						commit
						5dd4f2a3fb
					
				| @ -3,6 +3,7 @@ package common | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"math/big" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"git.grassecon.net/urdt/ussd/internal/storage" | ||||
| @ -24,7 +25,11 @@ func ProcessVouchers(holdings []dataserviceapi.TokenHoldings) VoucherMetadata { | ||||
| 
 | ||||
| 	for i, h := range holdings { | ||||
| 		symbols = append(symbols, fmt.Sprintf("%d:%s", i+1, h.TokenSymbol)) | ||||
| 		balances = append(balances, fmt.Sprintf("%d:%s", i+1, h.Balance)) | ||||
| 
 | ||||
| 		// Scale down the balance
 | ||||
| 		scaledBalance := ScaleDownBalance(h.Balance, h.TokenDecimals) | ||||
| 
 | ||||
| 		balances = append(balances, fmt.Sprintf("%d:%s", i+1, scaledBalance)) | ||||
| 		decimals = append(decimals, fmt.Sprintf("%d:%s", i+1, h.TokenDecimals)) | ||||
| 		addresses = append(addresses, fmt.Sprintf("%d:%s", i+1, h.ContractAddress)) | ||||
| 	} | ||||
| @ -37,6 +42,26 @@ func ProcessVouchers(holdings []dataserviceapi.TokenHoldings) VoucherMetadata { | ||||
| 	return data | ||||
| } | ||||
| 
 | ||||
| func ScaleDownBalance(balance, decimals string) string { | ||||
| 	// Convert balance and decimals to big.Float
 | ||||
| 	bal := new(big.Float) | ||||
| 	bal.SetString(balance) | ||||
| 
 | ||||
| 	dec, ok := new(big.Int).SetString(decimals, 10) | ||||
| 	if !ok { | ||||
| 		dec = big.NewInt(0) // Default to 0 decimals in case of conversion failure
 | ||||
| 	} | ||||
| 
 | ||||
| 	divisor := new(big.Float).SetInt(new(big.Int).Exp(big.NewInt(10), dec, nil)) | ||||
| 	scaledBalance := new(big.Float).Quo(bal, divisor) | ||||
| 
 | ||||
| 	// Return the scaled balance without trailing decimals if it's an integer
 | ||||
| 	if scaledBalance.IsInt() { | ||||
| 		return scaledBalance.Text('f', 0) | ||||
| 	} | ||||
| 	return scaledBalance.Text('f', -1) | ||||
| } | ||||
| 
 | ||||
| // GetVoucherData retrieves and matches voucher data
 | ||||
| func GetVoucherData(ctx context.Context, db storage.PrefixDb, input string) (*dataserviceapi.TokenHoldings, error) { | ||||
| 	keys := []string{"sym", "bal", "deci", "addr"} | ||||
| @ -75,7 +100,7 @@ func MatchVoucher(input, symbols, balances, decimals, addresses string) (symbol, | ||||
| 	decList := strings.Split(decimals, "\n") | ||||
| 	addrList := strings.Split(addresses, "\n") | ||||
| 
 | ||||
| 	logg.Tracef("found" , "symlist", symList, "syms", symbols, "input", input) | ||||
| 	logg.Tracef("found", "symlist", symList, "syms", symbols, "input", input) | ||||
| 	for i, sym := range symList { | ||||
| 		parts := strings.SplitN(sym, ":", 2) | ||||
| 
 | ||||
|  | ||||
| @ -1468,6 +1468,9 @@ func (h *Handlers) SetDefaultVoucher(ctx context.Context, sym string, input []by | ||||
| 			defaultDec := firstVoucher.TokenDecimals | ||||
| 			defaultAddr := firstVoucher.ContractAddress | ||||
| 
 | ||||
| 			// Scale down the balance
 | ||||
| 			scaledBalance := common.ScaleDownBalance(defaultBal, defaultDec) | ||||
| 
 | ||||
| 			// set the active symbol
 | ||||
| 			err = store.WriteEntry(ctx, sessionId, common.DATA_ACTIVE_SYM, []byte(defaultSym)) | ||||
| 			if err != nil { | ||||
| @ -1475,9 +1478,9 @@ func (h *Handlers) SetDefaultVoucher(ctx context.Context, sym string, input []by | ||||
| 				return res, err | ||||
| 			} | ||||
| 			// set the active balance
 | ||||
| 			err = store.WriteEntry(ctx, sessionId, common.DATA_ACTIVE_BAL, []byte(defaultBal)) | ||||
| 			err = store.WriteEntry(ctx, sessionId, common.DATA_ACTIVE_BAL, []byte(scaledBalance)) | ||||
| 			if err != nil { | ||||
| 				logg.ErrorCtxf(ctx, "failed to write defaultBal entry with", "key", common.DATA_ACTIVE_BAL, "value", defaultBal, "error", err) | ||||
| 				logg.ErrorCtxf(ctx, "failed to write defaultBal entry with", "key", common.DATA_ACTIVE_BAL, "value", scaledBalance, "error", err) | ||||
| 				return res, err | ||||
| 			} | ||||
| 			// set the active decimals
 | ||||
| @ -1563,6 +1566,7 @@ func (h *Handlers) GetVoucherList(ctx context.Context, sym string, input []byte) | ||||
| } | ||||
| 
 | ||||
| // ViewVoucher retrieves the token holding and balance from the subprefixDB
 | ||||
| // and displays it to the user for them to select it
 | ||||
| func (h *Handlers) ViewVoucher(ctx context.Context, sym string, input []byte) (resource.Result, error) { | ||||
| 	var res resource.Result | ||||
| 	sessionId, ok := ctx.Value("SessionId").(string) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user