Skip to content

Commit 5e77631

Browse files
dlipicarAYAHASSAN287
authored andcommitted
feat: clean up balance fetching from token manager (#6991)
* feat: improvemets to multistandardbalance controller * feat: introduce tokenbalances package * chore: replace balance fetching capabilities from reader and token manager with tokenbalances * feat: allow overriding multicall3 contract address * chore: fix tests * chore: pr comments
1 parent c3bc720 commit 5e77631

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2074
-3120
lines changed

api/defaults.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,9 @@ func buildWalletConfig(walletRequest *requests.WalletConfig, request *requests.W
201201
if walletRequest.MarketDataPriceRefreshInterval != 0 {
202202
walletConfig.MarketDataProxyConfig.PriceRefreshInterval = walletRequest.MarketDataPriceRefreshInterval
203203
}
204+
if len(walletRequest.MulticallOverrides) > 0 {
205+
walletConfig.MulticallOverrides = walletRequest.MulticallOverrides
206+
}
204207

205208
if !request.StatusProxyUser.Empty() {
206209
walletConfig.StatusProxyUser = request.StatusProxyUser

api/geth_backend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2348,7 +2348,7 @@ func (b *GethStatusBackend) initProtocol() error {
23482348
TimeSource: b.statusNode.TimeSource(),
23492349
MetricsEnabled: b.prometheusMetrics != nil,
23502350
TokenManager: NewCommunitiesTokenManager(b.statusNode.TokenManager()),
2351-
TokenBalanceManager: NewCommunitiesTokenBalanceManager(b.statusNode.TokenManager()),
2351+
TokenBalanceManager: NewCommunitiesTokenBalanceManager(b.statusNode.TokenBalancesFetcher(), b.statusNode.TokenBalancesStorage()),
23522352
NetworkManager: NewCommunitiesNetworkManager(b.statusNode.RPCClient().GetNetworkManager()),
23532353
}
23542354
err = st.InitProtocol(params)

api/protocol_adaptors.go

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@ package api
22

33
import (
44
"context"
5+
"fmt"
6+
"math/big"
57

68
gethcommon "github.com/ethereum/go-ethereum/common"
9+
"github.com/ethereum/go-ethereum/common/hexutil"
710
"github.com/status-im/status-go/protocol/communities"
811
"github.com/status-im/status-go/rpc/network"
912
"github.com/status-im/status-go/services/wallet/token"
1013
tokenTypes "github.com/status-im/status-go/services/wallet/token/types"
14+
"github.com/status-im/status-go/services/wallet/tokenbalances"
1115
)
1216

1317
var _ communities.NetworkManager = (*CommunitiesNetworkManager)(nil)
@@ -48,28 +52,52 @@ func (m *CommunitiesTokenManager) FindOrCreateTokenByAddress(ctx context.Context
4852
}
4953

5054
type CommunitiesTokenBalanceManager struct {
51-
tokenManager *token.Manager
55+
tokenBalancesFetcher *tokenbalances.Fetcher
56+
tokenBalancesStorage tokenbalances.Storage
5257
}
5358

54-
func NewCommunitiesTokenBalanceManager(tm *token.Manager) *CommunitiesTokenBalanceManager {
55-
return &CommunitiesTokenBalanceManager{tokenManager: tm}
59+
func NewCommunitiesTokenBalanceManager(f *tokenbalances.Fetcher, s tokenbalances.Storage) *CommunitiesTokenBalanceManager {
60+
return &CommunitiesTokenBalanceManager{tokenBalancesFetcher: f, tokenBalancesStorage: s}
5661
}
5762

5863
func (m *CommunitiesTokenBalanceManager) GetBalancesByChain(ctx context.Context, accounts, tokenAddresses []gethcommon.Address, chainIDs []uint64) (communities.BalancesByChain, error) {
59-
chainClients, err := m.tokenManager.RPCClient.EthClients(chainIDs)
60-
if err != nil {
61-
return nil, err
64+
if m.tokenBalancesFetcher == nil {
65+
return nil, fmt.Errorf("tokenBalancesFetcher is nil")
6266
}
63-
64-
resp, err := m.tokenManager.GetBalancesByChain(context.Background(), chainClients, accounts, tokenAddresses)
65-
return resp, err
67+
ret := make(communities.BalancesByChain)
68+
for _, chainID := range chainIDs {
69+
ret[chainID] = make(map[gethcommon.Address]map[gethcommon.Address]*hexutil.Big)
70+
balances, err := m.tokenBalancesFetcher.Fetch(ctx, chainID, tokenAddresses, accounts)
71+
if err != nil {
72+
return nil, err
73+
}
74+
ret[chainID] = balancesToCommunitiesBalances(balances)
75+
}
76+
return ret, nil
6677
}
6778

6879
func (m *CommunitiesTokenBalanceManager) GetCachedBalancesByChain(ctx context.Context, accounts, tokenAddresses []gethcommon.Address, chainIDs []uint64) (communities.BalancesByChain, error) {
69-
resp, err := m.tokenManager.GetCachedBalancesByChain(accounts, tokenAddresses, chainIDs)
70-
if err != nil {
71-
return resp, err
80+
if m.tokenBalancesStorage == nil {
81+
return nil, fmt.Errorf("tokenBalancesStorage is nil")
82+
}
83+
ret := make(communities.BalancesByChain)
84+
for _, chainID := range chainIDs {
85+
balances, err := m.tokenBalancesStorage.GetBalances(ctx, chainID, tokenAddresses, accounts)
86+
if err != nil {
87+
return nil, err
88+
}
89+
ret[chainID] = balancesToCommunitiesBalances(balances)
7290
}
91+
return ret, nil
92+
}
7393

74-
return resp, nil
94+
func balancesToCommunitiesBalances(balances map[gethcommon.Address]map[gethcommon.Address]*big.Int) map[gethcommon.Address]map[gethcommon.Address]*hexutil.Big {
95+
ret := make(map[gethcommon.Address]map[gethcommon.Address]*hexutil.Big)
96+
for account, tokenBalances := range balances {
97+
ret[account] = make(map[gethcommon.Address]*hexutil.Big)
98+
for token, balance := range tokenBalances {
99+
ret[account][token] = (*hexutil.Big)(balance)
100+
}
101+
}
102+
return ret
75103
}

contracts/balancechecker/BalanceChecker.go

Lines changed: 0 additions & 275 deletions
This file was deleted.

0 commit comments

Comments
 (0)