mirror of
https://github.com/status-im/status-go.git
synced 2025-02-02 01:47:44 +00:00
feat: allow to get wallet token for specific addresses
This commit is contained in:
parent
f25ac111db
commit
d7bf19fdbb
@ -34,8 +34,8 @@ func (api *API) StartWallet(ctx context.Context) error {
|
|||||||
return api.reader.Start()
|
return api.reader.Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *API) GetWalletToken(ctx context.Context) (map[common.Address][]Token, error) {
|
func (api *API) GetWalletToken(ctx context.Context, addresses []common.Address) (map[common.Address][]Token, error) {
|
||||||
return api.reader.GetWalletToken(ctx)
|
return api.reader.GetWalletToken(ctx, addresses)
|
||||||
}
|
}
|
||||||
|
|
||||||
type DerivedAddress struct {
|
type DerivedAddress struct {
|
||||||
|
@ -57,14 +57,6 @@ type Token struct {
|
|||||||
CurrencyPrice float64 `json:"currencyPrice"`
|
CurrencyPrice float64 `json:"currencyPrice"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAddresses(accounts []*accounts.Account) []common.Address {
|
|
||||||
addresses := make([]common.Address, len(accounts))
|
|
||||||
for _, account := range accounts {
|
|
||||||
addresses = append(addresses, common.Address(account.Address))
|
|
||||||
}
|
|
||||||
return addresses
|
|
||||||
}
|
|
||||||
|
|
||||||
func getTokenBySymbols(tokens []*token.Token) map[string][]*token.Token {
|
func getTokenBySymbols(tokens []*token.Token) map[string][]*token.Token {
|
||||||
res := make(map[string][]*token.Token)
|
res := make(map[string][]*token.Token)
|
||||||
|
|
||||||
@ -127,7 +119,7 @@ func (r *Reader) Stop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Reader) GetWalletToken(ctx context.Context) (map[common.Address][]Token, error) {
|
func (r *Reader) GetWalletToken(ctx context.Context, addresses []common.Address) (map[common.Address][]Token, error) {
|
||||||
networks, err := r.rpcClient.NetworkManager.Get(false)
|
networks, err := r.rpcClient.NetworkManager.Get(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -154,11 +146,6 @@ func (r *Reader) GetWalletToken(ctx context.Context) (map[common.Address][]Token
|
|||||||
tokenSymbols := getTokenSymbols(allTokens)
|
tokenSymbols := getTokenSymbols(allTokens)
|
||||||
tokenAddresses := getTokenAddresses(allTokens)
|
tokenAddresses := getTokenAddresses(allTokens)
|
||||||
|
|
||||||
accounts, err := r.accountsDB.GetAccounts()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
group = async.NewAtomicGroup(ctx)
|
group = async.NewAtomicGroup(ctx)
|
||||||
prices = map[string]float64{}
|
prices = map[string]float64{}
|
||||||
@ -197,7 +184,7 @@ func (r *Reader) GetWalletToken(ctx context.Context) (map[common.Address][]Token
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
balances, err = r.tokenManager.GetBalancesByChain(ctx, clients, getAddresses(accounts), tokenAddresses)
|
balances, err = r.tokenManager.GetBalancesByChain(ctx, clients, addresses, tokenAddresses)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -214,13 +201,12 @@ func (r *Reader) GetWalletToken(ctx context.Context) (map[common.Address][]Token
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
result := make(map[common.Address][]Token)
|
result := make(map[common.Address][]Token)
|
||||||
for _, account := range accounts {
|
for _, address := range addresses {
|
||||||
commonAddress := common.Address(account.Address)
|
|
||||||
for symbol, tokens := range getTokenBySymbols(allTokens) {
|
for symbol, tokens := range getTokenBySymbols(allTokens) {
|
||||||
balancesPerChain := make(map[uint64]ChainBalance)
|
balancesPerChain := make(map[uint64]ChainBalance)
|
||||||
decimals := tokens[0].Decimals
|
decimals := tokens[0].Decimals
|
||||||
for _, token := range tokens {
|
for _, token := range tokens {
|
||||||
hexBalance := balances[token.ChainID][commonAddress][token.Address]
|
hexBalance := balances[token.ChainID][address][token.Address]
|
||||||
balance := big.NewFloat(0.0)
|
balance := big.NewFloat(0.0)
|
||||||
if hexBalance != nil {
|
if hexBalance != nil {
|
||||||
balance = new(big.Float).Quo(
|
balance = new(big.Float).Quo(
|
||||||
@ -254,7 +240,7 @@ func (r *Reader) GetWalletToken(ctx context.Context) (map[common.Address][]Token
|
|||||||
CurrencyPrice: prices[symbol],
|
CurrencyPrice: prices[symbol],
|
||||||
}
|
}
|
||||||
|
|
||||||
result[commonAddress] = append(result[commonAddress], walletToken)
|
result[address] = append(result[address], walletToken)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user