ussd/common/tokens.go

55 lines
1.2 KiB
Go
Raw Normal View History

package common
import (
"context"
"math/big"
"strconv"
)
func ParseAndScaleAmount(storedAmount, activeDecimal []byte) (string, error) {
// Parse token decimal
tokenDecimal, err := strconv.Atoi(string(activeDecimal))
if err != nil {
return "", err
}
// Parse amount
amount, _, err := big.ParseFloat(string(storedAmount), 10, 0, big.ToZero)
if err != nil {
return "", err
}
// Scale the amount
multiplier := new(big.Float).SetInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(tokenDecimal)), nil))
finalAmount := new(big.Float).Mul(amount, multiplier)
// Convert finalAmount to a string
finalAmountStr := new(big.Int)
finalAmount.Int(finalAmountStr)
return finalAmountStr.String(), nil
}
func ReadTransactionData(ctx context.Context, store DataStore, sessionId string) (map[DataTyp][]byte, error) {
dataKeys := []DataTyp{
DATA_TEMPORARY_VALUE,
DATA_ACTIVE_SYM,
DATA_AMOUNT,
DATA_PUBLIC_KEY,
DATA_RECIPIENT,
DATA_ACTIVE_DECIMAL,
DATA_ACTIVE_ADDRESS,
}
data := make(map[DataTyp][]byte)
for _, key := range dataKeys {
value, err := store.ReadEntry(ctx, sessionId, key)
if err != nil {
return nil, err
}
data[key] = value
}
return data, nil
}