Compare commits
5 Commits
e8978413a5
...
3e9a67b34e
Author | SHA1 | Date | |
---|---|---|---|
3e9a67b34e | |||
2a2d43c279 | |||
a1f0e4dcfe | |||
ee07bf11f8 | |||
cb1d129eda |
1
services/registration/swap_limit
Normal file
1
services/registration/swap_limit
Normal file
@ -0,0 +1 @@
|
|||||||
|
{{.swap_max_limit}}
|
7
services/registration/swap_limit.vis
Normal file
7
services/registration/swap_limit.vis
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
LOAD swap_max_limit 0
|
||||||
|
CATCH _ flag_incorrect_voucher 1
|
||||||
|
MAP swap_max_limit
|
||||||
|
MOUT back 0
|
||||||
|
HALT
|
||||||
|
INCMP _ 0
|
||||||
|
INCMP swap_preview *
|
1
services/registration/swap_limit_swa
Normal file
1
services/registration/swap_limit_swa
Normal file
@ -0,0 +1 @@
|
|||||||
|
{{.swap_max_limit}}
|
3
services/registration/swap_preview
Normal file
3
services/registration/swap_preview
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{{.swap_preview}}
|
||||||
|
|
||||||
|
Please enter your PIN to confirm:
|
11
services/registration/swap_preview.vis
Normal file
11
services/registration/swap_preview.vis
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
LOAD swap_preview 0
|
||||||
|
MAP swap_preview
|
||||||
|
MOUT back 0
|
||||||
|
MOUT quit 9
|
||||||
|
LOAD authorize_account 6
|
||||||
|
HALT
|
||||||
|
RELOAD authorize_account
|
||||||
|
CATCH incorrect_pin flag_incorrect_pin 1
|
||||||
|
INCMP _ 0
|
||||||
|
INCMP quit 9
|
||||||
|
INCMP swap_initiated *
|
3
services/registration/swap_preview_swa
Normal file
3
services/registration/swap_preview_swa
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{{.swap_preview}}
|
||||||
|
|
||||||
|
Tafadhali weka PIN yako kudhibitisha:
|
@ -63,6 +63,24 @@ const (
|
|||||||
DATA_INITIAL_LANGUAGE_CODE
|
DATA_INITIAL_LANGUAGE_CODE
|
||||||
//Fully qualified account alias string
|
//Fully qualified account alias string
|
||||||
DATA_ACCOUNT_ALIAS
|
DATA_ACCOUNT_ALIAS
|
||||||
|
// Holds the active pool contract address for the swap
|
||||||
|
DATA_ACTIVE_POOL_ADDRESS
|
||||||
|
// Currently active swap from symbol for the swap
|
||||||
|
DATA_ACTIVE_SWAP_FROM_SYM
|
||||||
|
// Currently active swap from decimal count for the swap
|
||||||
|
DATA_ACTIVE_SWAP_FROM_DECIMAL
|
||||||
|
// Holds the active swap from contract address for the swap
|
||||||
|
DATA_ACTIVE_SWAP_FROM_ADDRESS
|
||||||
|
// Currently active swap from to for the swap
|
||||||
|
DATA_ACTIVE_SWAP_TO_SYM
|
||||||
|
// Currently active swap to decimal count for the swap
|
||||||
|
DATA_ACTIVE_SWAP_TO_DECIMAL
|
||||||
|
// Holds the active pool contract address for the swap
|
||||||
|
DATA_ACTIVE_SWAP_TO_ADDRESS
|
||||||
|
// Holds the max swap amount for the swap
|
||||||
|
DATA_ACTIVE_SWAP_MAX_AMOUNT
|
||||||
|
// Holds the active swap amount for the swap
|
||||||
|
DATA_ACTIVE_SWAP_AMOUNT
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -108,6 +126,22 @@ const (
|
|||||||
DATA_POOL_SYMBOLS
|
DATA_POOL_SYMBOLS
|
||||||
// List of contact addresses in the top pools context
|
// List of contact addresses in the top pools context
|
||||||
DATA_POOL_ADDRESSES
|
DATA_POOL_ADDRESSES
|
||||||
|
// List of swap from voucher symbols in the user context.
|
||||||
|
DATA_POOL_FROM_SYMBOLS
|
||||||
|
// List of swap from balances for vouchers valid in the pools context.
|
||||||
|
DATA_POOL_FROM_BALANCES
|
||||||
|
// List of swap from decimal counts for vouchers valid in the pools context.
|
||||||
|
DATA_POOL_FROM_DECIMALS
|
||||||
|
// List of swap from EVM addresses for vouchers valid in the pools context.
|
||||||
|
DATA_POOL_FROM_ADDRESSES
|
||||||
|
// List of swap to voucher symbols in the user context.
|
||||||
|
DATA_POOL_TO_SYMBOLS
|
||||||
|
// List of swap to balances for vouchers valid in the pools context.
|
||||||
|
DATA_POOL_TO_BALANCES
|
||||||
|
// List of swap to decimal counts for vouchers valid in the pools context.
|
||||||
|
DATA_POOL_TO_DECIMALS
|
||||||
|
// List of swap to EVM addresses for vouchers valid in the pools context.
|
||||||
|
DATA_POOL_TO_ADDRESSES
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
|
||||||
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
|
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -31,3 +33,61 @@ func ProcessPools(pools []dataserviceapi.PoolDetails) PoolsMetadata {
|
|||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPoolData retrieves and matches pool data
|
||||||
|
// if no match is found, it fetches the API with the symbol
|
||||||
|
func GetPoolData(ctx context.Context, db storedb.PrefixDb, input string) (*dataserviceapi.PoolDetails, error) {
|
||||||
|
keys := []storedb.DataTyp{
|
||||||
|
storedb.DATA_POOL_NAMES,
|
||||||
|
storedb.DATA_POOL_SYMBOLS,
|
||||||
|
storedb.DATA_POOL_ADDRESSES,
|
||||||
|
}
|
||||||
|
data := make(map[storedb.DataTyp]string)
|
||||||
|
|
||||||
|
for _, key := range keys {
|
||||||
|
value, err := db.Get(ctx, storedb.ToBytes(key))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to get prefix key %x: %v", storedb.ToBytes(key), err)
|
||||||
|
}
|
||||||
|
data[key] = string(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
name, symbol, address := MatchPool(input,
|
||||||
|
data[storedb.DATA_POOL_NAMES],
|
||||||
|
data[storedb.DATA_POOL_SYMBOLS],
|
||||||
|
data[storedb.DATA_POOL_ADDRESSES],
|
||||||
|
)
|
||||||
|
|
||||||
|
if symbol == "" {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &dataserviceapi.PoolDetails{
|
||||||
|
PoolName: string(name),
|
||||||
|
PoolSymbol: string(symbol),
|
||||||
|
PoolContractAdrress: string(address),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MatchPool finds the matching pool name, symbol and pool contract address based on the input.
|
||||||
|
func MatchPool(input, names, symbols, addresses string) (name, symbol, address string) {
|
||||||
|
nameList := strings.Split(names, "\n")
|
||||||
|
symList := strings.Split(symbols, "\n")
|
||||||
|
addrList := strings.Split(addresses, "\n")
|
||||||
|
|
||||||
|
for i, sym := range symList {
|
||||||
|
parts := strings.SplitN(sym, ":", 2)
|
||||||
|
|
||||||
|
if input == parts[0] || strings.EqualFold(input, parts[1]) {
|
||||||
|
symbol = parts[1]
|
||||||
|
if i < len(nameList) {
|
||||||
|
name = strings.SplitN(nameList[i], ":", 2)[1]
|
||||||
|
}
|
||||||
|
if i < len(addrList) {
|
||||||
|
address = strings.SplitN(addrList[i], ":", 2)[1]
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
65
store/swap_from_vouchers.go
Normal file
65
store/swap_from_vouchers.go
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package store
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
|
||||||
|
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetSwapFromVoucherData retrieves and matches swap from voucher data
|
||||||
|
func GetSwapFromVoucherData(ctx context.Context, db storedb.PrefixDb, input string) (*dataserviceapi.TokenHoldings, error) {
|
||||||
|
keys := []storedb.DataTyp{
|
||||||
|
storedb.DATA_POOL_FROM_SYMBOLS,
|
||||||
|
storedb.DATA_POOL_FROM_BALANCES,
|
||||||
|
storedb.DATA_POOL_FROM_DECIMALS,
|
||||||
|
storedb.DATA_POOL_FROM_ADDRESSES,
|
||||||
|
}
|
||||||
|
data := make(map[storedb.DataTyp]string)
|
||||||
|
|
||||||
|
for _, key := range keys {
|
||||||
|
value, err := db.Get(ctx, storedb.ToBytes(key))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to get prefix key %x: %v", storedb.ToBytes(key), err)
|
||||||
|
}
|
||||||
|
data[key] = string(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
symbol, balance, decimal, address := MatchVoucher(input,
|
||||||
|
data[storedb.DATA_POOL_FROM_SYMBOLS],
|
||||||
|
data[storedb.DATA_POOL_FROM_BALANCES],
|
||||||
|
data[storedb.DATA_POOL_FROM_DECIMALS],
|
||||||
|
data[storedb.DATA_POOL_FROM_ADDRESSES],
|
||||||
|
)
|
||||||
|
|
||||||
|
if symbol == "" {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &dataserviceapi.TokenHoldings{
|
||||||
|
TokenSymbol: string(symbol),
|
||||||
|
Balance: string(balance),
|
||||||
|
TokenDecimals: string(decimal),
|
||||||
|
ContractAddress: string(address),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateSwapFromVoucherData updates the active swap to voucher data in the DataStore.
|
||||||
|
func UpdateSwapFromVoucherData(ctx context.Context, store DataStore, sessionId string, data *dataserviceapi.TokenHoldings) error {
|
||||||
|
logg.TraceCtxf(ctx, "dtal", "data", data)
|
||||||
|
// Active swap from voucher data entries
|
||||||
|
activeEntries := map[storedb.DataTyp][]byte{
|
||||||
|
storedb.DATA_ACTIVE_SWAP_FROM_SYM: []byte(data.TokenSymbol),
|
||||||
|
storedb.DATA_ACTIVE_SWAP_FROM_DECIMAL: []byte(data.TokenDecimals),
|
||||||
|
storedb.DATA_ACTIVE_SWAP_FROM_ADDRESS: []byte(data.ContractAddress),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write active data
|
||||||
|
for key, value := range activeEntries {
|
||||||
|
if err := store.WriteEntry(ctx, sessionId, key, value); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
65
store/swap_to_vouchers.go
Normal file
65
store/swap_to_vouchers.go
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package store
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
|
||||||
|
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetSwapToVoucherData retrieves and matches voucher data
|
||||||
|
func GetSwapToVoucherData(ctx context.Context, db storedb.PrefixDb, input string) (*dataserviceapi.TokenHoldings, error) {
|
||||||
|
keys := []storedb.DataTyp{
|
||||||
|
storedb.DATA_POOL_TO_SYMBOLS,
|
||||||
|
storedb.DATA_POOL_TO_BALANCES,
|
||||||
|
storedb.DATA_POOL_TO_DECIMALS,
|
||||||
|
storedb.DATA_POOL_TO_ADDRESSES,
|
||||||
|
}
|
||||||
|
data := make(map[storedb.DataTyp]string)
|
||||||
|
|
||||||
|
for _, key := range keys {
|
||||||
|
value, err := db.Get(ctx, storedb.ToBytes(key))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to get prefix key %x: %v", storedb.ToBytes(key), err)
|
||||||
|
}
|
||||||
|
data[key] = string(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
symbol, balance, decimal, address := MatchVoucher(input,
|
||||||
|
data[storedb.DATA_POOL_TO_SYMBOLS],
|
||||||
|
data[storedb.DATA_POOL_TO_BALANCES],
|
||||||
|
data[storedb.DATA_POOL_TO_DECIMALS],
|
||||||
|
data[storedb.DATA_POOL_TO_ADDRESSES],
|
||||||
|
)
|
||||||
|
|
||||||
|
if symbol == "" {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &dataserviceapi.TokenHoldings{
|
||||||
|
TokenSymbol: string(symbol),
|
||||||
|
Balance: string(balance),
|
||||||
|
TokenDecimals: string(decimal),
|
||||||
|
ContractAddress: string(address),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateSwapToVoucherData updates the active swap to voucher data in the DataStore.
|
||||||
|
func UpdateSwapToVoucherData(ctx context.Context, store DataStore, sessionId string, data *dataserviceapi.TokenHoldings) error {
|
||||||
|
logg.TraceCtxf(ctx, "dtal", "data", data)
|
||||||
|
// Active swap to voucher data entries
|
||||||
|
activeEntries := map[storedb.DataTyp][]byte{
|
||||||
|
storedb.DATA_ACTIVE_SWAP_TO_SYM: []byte(data.TokenSymbol),
|
||||||
|
storedb.DATA_ACTIVE_SWAP_TO_DECIMAL: []byte(data.TokenDecimals),
|
||||||
|
storedb.DATA_ACTIVE_SWAP_TO_ADDRESS: []byte(data.ContractAddress),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write active data
|
||||||
|
for key, value := range activeEntries {
|
||||||
|
if err := store.WriteEntry(ctx, sessionId, key, value); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user