Compare commits

..

46 Commits

Author SHA1 Message Date
alfred-mk
d60f5461e6 Merge branch 'master' into alfred/pool-swap 2025-05-19 16:44:16 +03:00
alfred-mk
35d562ffdd use a default pool and the active voucher to perform a swap 2025-05-19 03:13:09 +03:00
alfred-mk
7d8631fa87 use the userstore instead of the prefixdb 2025-05-19 02:30:12 +03:00
alfred-mk
c8159113f0 updated the correct swap data keys and use the userstore instead of the prefixdb 2025-05-19 02:29:47 +03:00
alfred-mk
126415050c removed unused functions 2025-05-19 02:28:01 +03:00
alfred-mk
5b989d83e1 fix UI 2025-05-19 02:27:23 +03:00
alfred-mk
7199d0f3e0 add a message and translation for the missing voucher in the default pool 2025-05-19 02:26:37 +03:00
alfred-mk
feea74c2c9 add a RELOAD for the back navigation from swap_limit 2025-05-19 02:25:40 +03:00
alfred-mk
b6dcf65ea3 add a catch fow when the active voucher is not in the default pool 2025-05-19 02:24:42 +03:00
alfred-mk
da7b6e93e1 navigate directly to the swap_to_list 2025-05-19 02:21:56 +03:00
alfred-mk
97be43b9ec use updated sarafu-api package 2025-05-19 02:00:40 +03:00
alfred-mk
a9ecb1bbae removed unused vis files and templates 2025-05-19 01:59:59 +03:00
alfred-mk
7e2e3c3722 upgMerge branch 'master' into alfred/pool-swap 2025-05-14 12:15:40 +03:00
alfred-mk
724d11b4db Added TestGetSwapToVoucherData 2025-03-13 17:09:00 +03:00
alfred-mk
2ace3606bc Added TestUpdateSwapFromVoucherData 2025-03-13 13:19:58 +03:00
alfred-mk
ab5299fae2 Added TestGetSwapFromVoucherData 2025-03-13 13:15:38 +03:00
alfred-mk
c407dd1702 Added TestReadSwapPreviewData 2025-03-13 13:10:58 +03:00
alfred-mk
9729a6442b Added TestReadSwapData 2025-03-13 13:05:51 +03:00
alfred-mk
fd0c9cbc68 Updated sarafu-api package 2025-03-13 10:17:16 +03:00
alfred-mk
2eef202a1a Capitalize the Swap menu option 2025-03-13 09:30:57 +03:00
alfred-mk
1df102db9f Updated the SwapMaxLimit func to use the GetSwapFromTokenMaxLimit and set a flag when the max limit is invalid 2025-03-12 10:48:36 +03:00
alfred-mk
8292f76334 Updated the sarafu-api package 2025-03-12 10:46:45 +03:00
alfred-mk
ec8dc2fb1d Added a catch for the flag_low_swap_amount 2025-03-12 10:46:11 +03:00
alfred-mk
6a91049ffb Added a flag_low_swap_amount and vis files for when the swap max limit is less than 0.1 2025-03-12 10:45:38 +03:00
alfred-mk
d13d24f032 Update the conflicting input numbers on main.vis 2025-03-12 10:44:09 +03:00
alfred-mk
46d5c2f035 pass the correct arguments to the swap functions 2025-03-10 17:16:44 +03:00
alfred-mk
69ea52d91c use data fetched from sarafu-api 2025-03-10 16:48:19 +03:00
alfred-mk
450cba07c7 Use the latest sarafu-api 2025-03-10 16:45:04 +03:00
alfred-mk
16380dbe49 Use the GetPoolSwapQuote and PoolSwap functions for live data 2025-03-06 18:58:25 +03:00
alfred-mk
2a46de9a6f Use the latest sarafu-api changes with pool swap functionality 2025-03-06 18:57:24 +03:00
alfred-mk
baff75da50 Add swap functionality using dummy data 2025-03-06 09:25:55 +03:00
alfred-mk
d6047827a4 link swap related functions 2025-03-06 09:24:48 +03:00
alfred-mk
6642fc0137 added the swap_initiated vis node 2025-03-06 09:23:53 +03:00
alfred-mk
c367984930 move the catch for flag_account_authorized to the swap_preview node 2025-03-06 09:23:28 +03:00
alfred-mk
21922e2b62 added translation for the swap request confirmation 2025-03-06 09:22:53 +03:00
alfred-mk
a21186bd59 use a single swap.go file for swap helper functions 2025-03-05 17:00:44 +03:00
alfred-mk
28eefb6197 make the ReadStringEntry func accessible 2025-03-05 16:36:37 +03:00
alfred-mk
3e9a67b34e added the swap preview vis files 2025-03-04 21:21:59 +03:00
alfred-mk
2a2d43c279 added the swap limit vis files 2025-03-04 21:21:40 +03:00
alfred-mk
a1f0e4dcfe added functions to process the pool data and match based on the provided input 2025-03-04 21:21:02 +03:00
alfred-mk
ee07bf11f8 added helper functions to process the swap to and swap from voucher data 2025-03-04 21:20:05 +03:00
alfred-mk
cb1d129eda added swap db keys 2025-03-04 21:18:25 +03:00
alfred-mk
e8978413a5 added pool db processing 2025-02-26 13:10:15 +03:00
alfred-mk
566503956d added pool_swap menu nodes 2025-02-26 13:09:29 +03:00
alfred-mk
c5dbe966c4 added flag_incorrect_pool flag 2025-02-26 13:08:00 +03:00
alfred-mk
1221372424 use latest ussd-data-service package 2025-02-26 13:07:11 +03:00
12 changed files with 34 additions and 84 deletions

View File

@@ -21,11 +21,3 @@ LANGUAGES=eng, swa
#Alias search domains
ALIAS_SEARCH_DOMAINS=sarafu.local, sarafu.eth
#Pool swap
DEFAULT_POOL_NAME="Kenya ROLA Pool"
DEFAULT_POOL_SYMBOL=ROLA
DEFAULT_POOL_CONTRACT_ADDRESS=0x48a953cA5cf5298bc6f6Af3C608351f537AAcb9e
DEFAULT_LIMITER_ADDRESS=
DEFAULT_VOUCHER_REGISTRY=
INCLUDE_STABLES_PARAM=false

View File

@@ -25,7 +25,7 @@ const (
defaultSSHHost string = "127.0.0.1"
defaultSSHPort uint = 7122
defaultHTTPHost string = "127.0.0.1"
defaultHTTPPort uint = 7123
defaultHTTPPort uint = 7123
defaultDomain = "sarafu.local"
)
@@ -52,6 +52,7 @@ func SearchDomains() []string {
return ParsedDomains
}
func Language() string {
return viseconfig.DefaultLanguage
}
@@ -75,15 +76,3 @@ func PortSSH() uint {
func ATEndpoint() string {
return env.GetEnv("AT_ENDPOINT", "/")
}
func DefaultPoolAddress() string {
return env.GetEnv("DEFAULT_POOL_CONTRACT_ADDRESS", "")
}
func DefaultPoolName() string {
return env.GetEnv("DEFAULT_POOL_NAME", "")
}
func DefaultPoolSymbol() string {
return env.GetEnv("DEFAULT_POOL_SYMBOL", "")
}

4
go.mod
View File

@@ -5,12 +5,12 @@ go 1.23.4
require (
git.defalsify.org/vise.git v0.3.2-0.20250507172020-cb22240f1cb9
git.grassecon.net/grassrootseconomics/common v0.9.0-beta.1.0.20250417111317-2953f4c2f32e
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250521141246-6c3719e3b652
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250517114512-050998ff82b1
git.grassecon.net/grassrootseconomics/visedriver v0.9.0-beta.2.0.20250408094335-e2d1f65bb306
git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250129070628-5a539172c694
github.com/alecthomas/assert/v2 v2.2.2
github.com/gofrs/uuid v4.4.0+incompatible
github.com/grassrootseconomics/ussd-data-service v1.4.7-beta
github.com/grassrootseconomics/ussd-data-service v1.4.4-beta
github.com/jackc/pgx/v5 v5.7.1
github.com/peteole/testdata-loader v0.3.0
github.com/stretchr/testify v1.9.0

8
go.sum
View File

@@ -12,12 +12,6 @@ git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250517113706-
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250517113706-ee434dba6980/go.mod h1:K/TPgZ4OhPHBQq2X0ab3JZs4YjiexzSURZcfHLs9Pf4=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250517114512-050998ff82b1 h1:0hvILlGkZnXO8o7nZth4xu77vAS4zVQ6Ae0rb5x/Idg=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250517114512-050998ff82b1/go.mod h1:K/TPgZ4OhPHBQq2X0ab3JZs4YjiexzSURZcfHLs9Pf4=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250520125035-81fbc2574c30 h1:iZVmR/4xSoxahtkMBXs/z1HUSSnr+x1m+9AxXIgTvb0=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250520125035-81fbc2574c30/go.mod h1:R7+mt27mhm4/LCutAHHv87pOsLxXEPO93KXnhP8H6W0=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250521124206-343d30a2f27c h1:c2cA5hcYnLgs7kR4fF5tp42W6VQClTukbfKoaeskZu0=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250521124206-343d30a2f27c/go.mod h1:R7+mt27mhm4/LCutAHHv87pOsLxXEPO93KXnhP8H6W0=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250521141246-6c3719e3b652 h1:MmUQRL6Fjq/jlL53h+cUbJ7WwQ+q/yNy/zT05c7bgNg=
git.grassecon.net/grassrootseconomics/sarafu-api v0.9.0-beta.1.0.20250521141246-6c3719e3b652/go.mod h1:wKHPy1mpOCr9ahkRltwm1yi9qH/3m9xb8hMCX5C0L1o=
git.grassecon.net/grassrootseconomics/visedriver v0.9.0-beta.2.0.20250408094335-e2d1f65bb306 h1:Jo+yWysWw/N5BJQtAyEMN8ePVvAyPHv+JG4lQti+1N4=
git.grassecon.net/grassrootseconomics/visedriver v0.9.0-beta.2.0.20250408094335-e2d1f65bb306/go.mod h1:FdLwYtzsjOIcDiW4uDgDYnB4Wdzq12uJUe0QHSSPbSo=
git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250129070628-5a539172c694 h1:DjJlBSz0S13acft5XZDWk7ZYnzElym0xLMYEVgyNJ+E=
@@ -80,8 +74,6 @@ github.com/grassrootseconomics/ussd-data-service v1.4.0-beta h1:4fMd/3h2ZIhRg4Gd
github.com/grassrootseconomics/ussd-data-service v1.4.0-beta/go.mod h1:9sGnorpKaK76FmOGXoh/xv7x5siSFNYdXxQo9BKW4DI=
github.com/grassrootseconomics/ussd-data-service v1.4.4-beta h1:turlyo0i3OLj29mWpWNoB/3Qao8qEngT/5d1jDWTZE4=
github.com/grassrootseconomics/ussd-data-service v1.4.4-beta/go.mod h1:9sGnorpKaK76FmOGXoh/xv7x5siSFNYdXxQo9BKW4DI=
github.com/grassrootseconomics/ussd-data-service v1.4.7-beta h1:yAe1YaOBsdxW2m20jnVU4F0kLmFr+mK/gHCWEdHmE90=
github.com/grassrootseconomics/ussd-data-service v1.4.7-beta/go.mod h1:9sGnorpKaK76FmOGXoh/xv7x5siSFNYdXxQo9BKW4DI=
github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4 h1:U4kkNYryi/qfbBF8gh7Vsbuz+cVmhf5kt6pE9bYYyLo=
github.com/graygnuorg/go-gdbm v0.0.0-20220711140707-71387d66dce4/go.mod h1:zpZDgZFzeq9s0MIeB1P50NIEWDFFHSFBohI/NbaTD/Y=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=

View File

@@ -2707,6 +2707,11 @@ func (h *MenuHandlers) LoadSwapToList(ctx context.Context, sym string, input []b
}
userStore := h.userdataStore
publicKey, err := userStore.ReadEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY)
if err != nil {
logg.ErrorCtxf(ctx, "failed to read publicKey entry with", "key", storedb.DATA_PUBLIC_KEY, "error", err)
return res, err
}
// get the active address and symbol
activeAddress, err := userStore.ReadEntry(ctx, sessionId, storedb.DATA_ACTIVE_ADDRESS)
@@ -2733,9 +2738,9 @@ func (h *MenuHandlers) LoadSwapToList(ctx context.Context, sym string, input []b
}
defaultPool := dataserviceapi.PoolDetails{
PoolName: config.DefaultPoolName(),
PoolSymbol: config.DefaultPoolSymbol(),
PoolContractAdrress: config.DefaultPoolAddress(),
PoolName: "Kenya ROLA Pool",
PoolSymbol: "ROLA",
PoolContractAdrress: "0x48a953cA5cf5298bc6f6Af3C608351f537AAcb9e",
LimiterAddress: "",
VoucherRegistry: "",
}
@@ -2757,22 +2762,19 @@ func (h *MenuHandlers) LoadSwapToList(ctx context.Context, sym string, input []b
return res, err
}
logg.InfoCtxf(ctx, "CheckTokenInPool", "response", r, "active_pool_address", activePoolAddress, "address", activeAddress)
if !r.CanSwapFrom {
res.FlagSet = append(res.FlagSet, flag_incorrect_voucher)
res.Content = l.Get(
"%s is not in %s. Please update your voucher and try again.",
"%s is not in the KENYA ROLA POOL. Please update your voucher and try again.",
activeSym,
config.DefaultPoolName(),
)
return res, nil
}
res.FlagReset = append(res.FlagReset, flag_incorrect_voucher)
// call the api using the activePoolAddress to get a list of SwapToSymbolsData
swapToList, err := h.accountService.GetPoolSwappableVouchers(ctx, string(activePoolAddress))
// call the api using the activePoolAddress and publicKey to get a list of SwapToSymbolsData
swapToList, err := h.accountService.GetPoolSwappableVouchers(ctx, string(activePoolAddress), string(publicKey))
if err != nil {
res.FlagSet = append(res.FlagSet, flag_api_error)
logg.ErrorCtxf(ctx, "failed on FetchTransactions", "error", err)
@@ -2784,11 +2786,12 @@ func (h *MenuHandlers) LoadSwapToList(ctx context.Context, sym string, input []b
return res, nil
}
data := store.ProcessTokens(swapToList)
data := store.ProcessVouchers(swapToList)
// Store all swap_to tokens data
// Store all to list voucher data
dataMap := map[storedb.DataTyp]string{
storedb.DATA_POOL_TO_SYMBOLS: data.Symbols,
storedb.DATA_POOL_TO_BALANCES: data.Balances,
storedb.DATA_POOL_TO_DECIMALS: data.Decimals,
storedb.DATA_POOL_TO_ADDRESSES: data.Addresses,
}

View File

@@ -1 +1 @@
Your request failed. Please try again later.
Failed to connect to the custodial service. Please try again.

View File

@@ -1 +1 @@
Ombi lako halikufaulu. Tafadhali jaribu tena baadaye.
Imeshindwa kuunganisha kwenye huduma ya uangalizi. Tafadhali jaribu tena.

View File

@@ -37,5 +37,5 @@ msgstr "Ombi lako limetumwa. Utapokea SMS wakati %s %s yako itakapobadilishwa ku
msgid "%s balance: %s\n"
msgstr "%s salio: %s\n"
msgid "%s is not in %s. Please update your voucher and try again."
msgstr "%s haipo kwenye %s. Tafadhali badilisha sarafu yako na ujaribu tena."
msgid "%s is not in the KENYA ROLA POOL. Please update your voucher and try again."
msgstr "%s haipo kwenye BWAWA LA KENYA ROLA. Tafadhali badilisha sarafu yako na ujaribu tena."

View File

@@ -1,5 +1,4 @@
RELOAD swap_max_limit
CATCH api_failure flag_api_call_error 1
MAP swap_max_limit
MOUT back 0
HALT

View File

@@ -1,6 +1,5 @@
LOAD swap_preview 0
MAP swap_preview
CATCH api_failure flag_api_call_error 1
MOUT back 0
MOUT quit 9
LOAD authorize_account 6

View File

@@ -5,7 +5,6 @@ import (
"errors"
"fmt"
"reflect"
"strconv"
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
dataserviceapi "github.com/grassrootseconomics/ussd-data-service/pkg/api"
@@ -130,8 +129,8 @@ func GetSwapFromVoucherData(ctx context.Context, store DataStore, sessionId stri
}, nil
}
// GetSwapToVoucherData retrieves and matches token data
func GetSwapToVoucherData(ctx context.Context, store DataStore, sessionId string, input string) (*dataserviceapi.TokenDetails, error) {
// GetSwapToVoucherData retrieves and matches voucher data
func GetSwapToVoucherData(ctx context.Context, store DataStore, sessionId string, input string) (*dataserviceapi.TokenHoldings, error) {
keys := []storedb.DataTyp{
storedb.DATA_POOL_TO_SYMBOLS,
storedb.DATA_POOL_TO_BALANCES,
@@ -148,7 +147,7 @@ func GetSwapToVoucherData(ctx context.Context, store DataStore, sessionId string
data[key] = string(value)
}
symbol, _, decimal, address := MatchVoucher(input,
symbol, balance, decimal, address := MatchVoucher(input,
data[storedb.DATA_POOL_TO_SYMBOLS],
data[storedb.DATA_POOL_TO_BALANCES],
data[storedb.DATA_POOL_TO_DECIMALS],
@@ -159,27 +158,22 @@ func GetSwapToVoucherData(ctx context.Context, store DataStore, sessionId string
return nil, nil
}
decimalInt, err := strconv.ParseUint(decimal, 0, 64)
if err != nil {
logg.ErrorCtxf(ctx, "Failed to parse decimal to Uint:", "sessionId", sessionId, "decimal", decimal, "error", err)
return nil, nil
}
return &dataserviceapi.TokenDetails{
TokenSymbol: string(symbol),
TokenDecimals: uint8(decimalInt),
TokenAddress: string(address),
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.TokenDetails) error {
logg.TraceCtxf(ctx, "UpdateSwapToVoucherData", "data", data)
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.TokenAddress),
storedb.DATA_ACTIVE_SWAP_TO_DECIMAL: []byte(data.TokenDecimals),
storedb.DATA_ACTIVE_SWAP_TO_ADDRESS: []byte(data.ContractAddress),
}
// Write active data

View File

@@ -47,24 +47,6 @@ func ProcessVouchers(holdings []dataserviceapi.TokenHoldings) VoucherMetadata {
return data
}
// ProcessTokens converts swappable tokens into formatted strings
func ProcessTokens(holdings []dataserviceapi.TokenDetails) VoucherMetadata {
var data VoucherMetadata
var symbols, decimals, addresses []string
for i, h := range holdings {
symbols = append(symbols, fmt.Sprintf("%d:%s", i+1, h.TokenSymbol))
decimals = append(decimals, fmt.Sprintf("%d:%d", i+1, h.TokenDecimals))
addresses = append(addresses, fmt.Sprintf("%d:%s", i+1, h.TokenAddress))
}
data.Symbols = strings.Join(symbols, "\n")
data.Decimals = strings.Join(decimals, "\n")
data.Addresses = strings.Join(addresses, "\n")
return data
}
func ScaleDownBalance(balance, decimals string) string {
// Convert balance and decimals to big.Float
bal := new(big.Float)