Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

[v1.60] Fix #8182: KeyringInfo Refactor, Bump BraveCore to v1.60.81 #8197

Merged
merged 3 commits into from
Oct 12, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@ extension Tab: BraveWalletKeyringServiceObserver {
func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}

func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
func walletRestored() {
}

func keyringReset() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,14 +164,13 @@ struct AccountActivityView: View {
}
}
)
.onReceive(keyringStore.$allKeyrings) { allKeyrings in
let allAccounts = allKeyrings.flatMap(\.accountInfos)
.onReceive(keyringStore.$allAccounts, perform: { allAccounts in
StephenHeaps marked this conversation as resolved.
Show resolved Hide resolved
if !allAccounts.contains(where: { $0.address == accountInfo.address }) {
// Account was deleted
detailsPresentation = nil
presentationMode.dismiss()
}
}
})
.onAppear {
activityStore.update()
}
Expand Down
9 changes: 5 additions & 4 deletions Sources/BraveWallet/Crypto/Accounts/Add/AddAccountView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -348,12 +348,13 @@ struct AddAccountView: View {
}

private func defaultAccountName(for coin: BraveWallet.CoinType, chainId: String, isPrimary: Bool) -> String {
let keyringId = BraveWallet.KeyringId.keyringId(for: coin, on: chainId)
let keyringInfo = keyringStore.allKeyrings.first { $0.id == keyringId }
let accountsForCoin = keyringStore.allAccounts.filter { $0.coin == coin }
if isPrimary {
return String.localizedStringWithFormat(coin.defaultAccountName, (keyringInfo?.accountInfos.filter(\.isPrimary).count ?? 0) + 1)
let numberOfPrimaryAccountsForCoin = accountsForCoin.filter(\.isPrimary).count
return String.localizedStringWithFormat(coin.defaultAccountName, numberOfPrimaryAccountsForCoin + 1)
} else {
return String.localizedStringWithFormat(coin.defaultSecondaryAccountName, (keyringInfo?.accountInfos.filter(\.isImported).count ?? 0) + 1)
let numberOfImportedAccounts = accountsForCoin.filter(\.isImported).count
return String.localizedStringWithFormat(coin.defaultSecondaryAccountName, numberOfImportedAccounts + 1)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ struct AccountDetailsView_Previews: PreviewProvider {
static var previews: some View {
AccountDetailsView(
keyringStore: .previewStoreWithWalletCreated,
account: KeyringStore.previewStoreWithWalletCreated.defaultKeyring.accountInfos.first!,
account: KeyringStore.previewStoreWithWalletCreated.allAccounts.first!,
editMode: false
)
.previewColorSchemes()
Expand Down
6 changes: 3 additions & 3 deletions Sources/BraveWallet/Crypto/Stores/AccountActivityStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@ class AccountActivityStore: ObservableObject {
self.userVisibleAssets = updatedUserVisibleAssets
self.userVisibleNFTs = updatedUserVisibleNFTs

let keyringForAccount = await keyringService.keyringInfo(account.keyringId)
typealias TokenNetworkAccounts = (token: BraveWallet.BlockchainToken, network: BraveWallet.NetworkInfo, accounts: [BraveWallet.AccountInfo])
let allTokenNetworkAccounts = allVisibleUserAssets.flatMap { networkAssets in
networkAssets.tokens.map { token in
Expand Down Expand Up @@ -199,9 +198,10 @@ class AccountActivityStore: ObservableObject {
$0[$1.token.assetRatioId.lowercased()] = Double($1.price)
})

let allAccountsForCoin = await keyringService.allAccounts().accounts.filter { $0.coin == account.coin }
self.transactionSummaries = await fetchTransactionSummarys(
networksForAccountCoin: networksForAccountCoin,
accountInfos: keyringForAccount.accountInfos,
accountInfos: allAccountsForCoin,
userVisibleTokens: userVisibleAssets.map(\.token),
allTokens: allTokens,
assetRatios: assetRatios
Expand Down Expand Up @@ -278,7 +278,7 @@ extension AccountActivityStore: BraveWalletKeyringServiceObserver {
func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}

func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
func walletRestored() {
}

func keyringReset() {
Expand Down
22 changes: 12 additions & 10 deletions Sources/BraveWallet/Crypto/Stores/AssetDetailStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,8 @@ class AssetDetailStore: ObservableObject {
self.isSwapSupported = await swapService.isSwapSupported(token.chainId)

// fetch accounts
let keyringId = BraveWallet.KeyringId.keyringId(for: token.coin, on: token.chainId)
let keyring = await keyringService.keyringInfo(keyringId)
var updatedAccounts = keyring.accountInfos.map {
let allAccountsForTokenCoin = await keyringService.allAccounts().accounts.filter { $0.coin == token.coin }
var updatedAccounts = allAccountsForTokenCoin.map {
AccountAssetViewModel(account: $0, decimalBalance: 0.0, balance: "", fiatBalance: "")
}

Expand All @@ -187,9 +186,13 @@ class AssetDetailStore: ObservableObject {
}
}

self.accounts = await fetchAccountBalances(updatedAccounts, keyring: keyring, network: network)
self.accounts = await fetchAccountBalances(updatedAccounts, network: network)
let assetRatios = [token.assetRatioId.lowercased(): assetPriceValue]
self.transactionSummaries = await fetchTransactionSummarys(keyring: keyring, network: network, assetRatios: assetRatios)
self.transactionSummaries = await fetchTransactionSummarys(
accounts: allAccountsForTokenCoin,
network: network,
assetRatios: assetRatios
)
case .coinMarket(let coinMarket):
// comes from Market tab
self.price = self.currencyFormatter.string(from: NSNumber(value: coinMarket.currentPrice)) ?? ""
Expand Down Expand Up @@ -244,7 +247,6 @@ class AssetDetailStore: ObservableObject {

@MainActor private func fetchAccountBalances(
_ accountAssetViewModels: [AccountAssetViewModel],
keyring: BraveWallet.KeyringInfo,
network: BraveWallet.NetworkInfo
) async -> [AccountAssetViewModel] {
guard case let .blockchainToken(token) = assetDetailType
Expand Down Expand Up @@ -278,7 +280,7 @@ class AssetDetailStore: ObservableObject {
}

@MainActor private func fetchTransactionSummarys(
keyring: BraveWallet.KeyringInfo,
accounts: [BraveWallet.AccountInfo],
network: BraveWallet.NetworkInfo,
assetRatios: [String: Double]
) async -> [TransactionSummary] {
Expand All @@ -287,7 +289,7 @@ class AssetDetailStore: ObservableObject {
let userVisibleAssets = assetManager.getAllUserAssetsInNetworkAssets(networks: [network]).flatMap { $0.tokens }
let allTokens = await blockchainRegistry.allTokens(network.chainId, coin: network.coin)
let allTransactions = await withTaskGroup(of: [BraveWallet.TransactionInfo].self) { @MainActor group -> [BraveWallet.TransactionInfo] in
for account in keyring.accountInfos {
for account in accounts {
group.addTask { @MainActor in
await self.txService.allTransactionInfo(
network.coin,
Expand Down Expand Up @@ -337,7 +339,7 @@ class AssetDetailStore: ObservableObject {
TransactionParser.transactionSummary(
from: transaction,
network: network,
accountInfos: keyring.accountInfos,
accountInfos: accounts,
visibleTokens: userVisibleAssets,
allTokens: allTokens,
assetRatios: assetRatios,
Expand Down Expand Up @@ -382,7 +384,7 @@ extension AssetDetailStore: BraveWalletKeyringServiceObserver {
func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}

func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
func walletRestored() {
}

func locked() {
Expand Down
2 changes: 1 addition & 1 deletion Sources/BraveWallet/Crypto/Stores/BuyTokenStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ extension BuyTokenStore: BraveWalletKeyringServiceObserver {
public func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}

public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
public func walletRestored() {
}

public func keyringReset() {
Expand Down
6 changes: 3 additions & 3 deletions Sources/BraveWallet/Crypto/Stores/CryptoStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -423,13 +423,13 @@ public class CryptoStore: ObservableObject {

@MainActor
func fetchPendingTransactions() async -> [BraveWallet.TransactionInfo] {
let allKeyrings = await keyringService.keyrings(for: WalletConstants.supportedCoinTypes())
let allAccounts = await keyringService.allAccounts().accounts
var allNetworksForCoin: [BraveWallet.CoinType: [BraveWallet.NetworkInfo]] = [:]
for coin in WalletConstants.supportedCoinTypes() {
let allNetworks = await rpcService.allNetworks(coin)
allNetworksForCoin[coin] = allNetworks
}
return await txService.pendingTransactions(networksForCoin: allNetworksForCoin, for: allKeyrings)
return await txService.pendingTransactions(networksForCoin: allNetworksForCoin, for: allAccounts)
}

@MainActor
Expand Down Expand Up @@ -583,7 +583,7 @@ extension CryptoStore: BraveWalletKeyringServiceObserver {
// when user creates or imports a new account with a new keyring since any new
// supported coin type / keyring will be migrated inside `CryptoStore`'s init()
}
public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
public func walletRestored() {
// This observer method will only get called when user restore a wallet
// from the lock screen
// We will need to
Expand Down
34 changes: 12 additions & 22 deletions Sources/BraveWallet/Crypto/Stores/KeyringStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,7 @@ public class KeyringStore: ObservableObject {
id: .default,
isKeyringCreated: false,
isLocked: true,
isBackedUp: false,
accountInfos: []
isBackedUp: false
)
/// A boolean indciates front-end has or has not loaded Keyring from the core
@Published var isDefaultKeyringLoaded = false
Expand Down Expand Up @@ -154,9 +153,7 @@ public class KeyringStore: ObservableObject {
/// keyring has been created
@Published var isDefaultKeyringCreated: Bool = false
/// All `AccountInfo` for all available keyrings
var allAccounts: [BraveWallet.AccountInfo] {
allKeyrings.flatMap(\.accountInfos)
}
@Published var allAccounts: [BraveWallet.AccountInfo] = []

/// A list of default account with all support coin types
@Published var defaultAccounts: [BraveWallet.AccountInfo] = []
Expand Down Expand Up @@ -220,25 +217,18 @@ public class KeyringStore: ObservableObject {
return
}
Task { @MainActor in // fetch all KeyringInfo for all coin types
let selectedAccount = await keyringService.allAccounts().selectedAccount
let selectedAccountAddress = selectedAccount?.address
let allAccounts = await keyringService.allAccounts()
let allKeyrings = await keyringService.keyrings(for: WalletConstants.supportedCoinTypes())
if let defaultKeyring = allKeyrings.first(where: { $0.id == BraveWallet.KeyringId.default }) {
self.defaultKeyring = defaultKeyring
self.isDefaultKeyringLoaded = true
self.isDefaultKeyringCreated = defaultKeyring.isKeyringCreated
}
self.allKeyrings = allKeyrings
if let selectedAccountKeyring = allKeyrings.first(where: { $0.id == selectedAccount?.keyringId }) {
if self.selectedAccount.address != selectedAccountAddress {
if let selectedAccount = selectedAccountKeyring.accountInfos.first(where: { $0.address == selectedAccountAddress }) {
self.selectedAccount = selectedAccount
} else if let firstAccount = selectedAccountKeyring.accountInfos.first {
// try and correct invalid state (no selected account for this coin type)
self.selectedAccount = firstAccount
} // else selected account address does not exist in keyring (should not occur...)
} // else `self.selectedAccount` is already the currently selected account
} // else keyring for selected coin is unavailable (should not occur...)
self.allAccounts = allAccounts.accounts
if let selectedAccount = allAccounts.selectedAccount {
self.selectedAccount = selectedAccount
}
}
}

Expand Down Expand Up @@ -514,18 +504,18 @@ extension KeyringStore: BraveWalletKeyringServiceObserver {
}

Task { @MainActor in
let newKeyring = await keyringService.keyringInfo(keyringId)
let selectedAccount = await keyringService.allAccounts().selectedAccount
let allAccounts = await keyringService.allAccounts()
let allAccountsForKeyring = allAccounts.accounts.filter { $0.keyringId == keyringId }
// if the new Keyring doesn't have a selected account, select the first account
if selectedAccount == nil, let newAccount = newKeyring.accountInfos.first {
if allAccounts.selectedAccount == nil, let newAccount = allAccountsForKeyring.first {
await keyringService.setSelectedAccount(newAccount.accountId)
}
updateKeyringInfo()
}
}

public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
if isOnboardingVisible && !isRestoringWallet, keyringId == BraveWallet.KeyringId.default {
public func walletRestored() {
if isOnboardingVisible && !isRestoringWallet {
// Another window has restored a wallet. We should dismiss onboarding on this
// window and allow the other window to continue with it's onboarding flow.
isOnboardingVisible = false
Expand Down
2 changes: 1 addition & 1 deletion Sources/BraveWallet/Crypto/Stores/NFTStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ extension NFTStore: BraveWalletKeyringServiceObserver {
}
public func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}
public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
public func walletRestored() {
}
public func locked() {
}
Expand Down
10 changes: 5 additions & 5 deletions Sources/BraveWallet/Crypto/Stores/NetworkStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,9 @@ public class NetworkStore: ObservableObject {
_ network: BraveWallet.NetworkInfo,
isForOrigin: Bool
) async -> SetSelectedChainError? {
let keyringId = BraveWallet.KeyringId.keyringId(for: network.coin, on: network.chainId)
let keyringInfo = await keyringService.keyringInfo(keyringId)
if keyringInfo.accountInfos.isEmpty {
let allAccounts = await keyringService.allAccounts()
let allAccountsForNetworkCoin = allAccounts.accounts.filter { $0.coin == network.coin }
if allAccountsForNetworkCoin.isEmpty {
// Need to prompt user to create new account via alert
return .selectedChainHasNoAccounts
} else {
Expand All @@ -121,7 +121,7 @@ public class NetworkStore: ObservableObject {
self.defaultSelectedChainId = network.chainId
}

let currentlySelectedCoin = await keyringService.allAccounts().selectedAccount?.coin ?? .eth
let currentlySelectedCoin = allAccounts.selectedAccount?.coin ?? .eth
let rpcServiceNetwork = await rpcService.network(currentlySelectedCoin, origin: isForOrigin ? origin : nil)
guard rpcServiceNetwork.chainId != network.chainId else {
if !isForOrigin { // `isSwapSupported` is for the `defaultSelectedChain`
Expand Down Expand Up @@ -332,7 +332,7 @@ extension NetworkStore: BraveWalletKeyringServiceObserver {
public func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}

public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
public func walletRestored() {
}

public func keyringReset() {
Expand Down
2 changes: 1 addition & 1 deletion Sources/BraveWallet/Crypto/Stores/PortfolioStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,7 @@ extension PortfolioStore: BraveWalletKeyringServiceObserver {
}
public func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}
public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
public func walletRestored() {
}
public func locked() {
}
Expand Down
39 changes: 19 additions & 20 deletions Sources/BraveWallet/Crypto/Stores/SelectAccountTokenStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ class SelectAccountTokenStore: ObservableObject {
}

@MainActor func update() async {
let allKeyrings = await keyringService.keyrings(for: WalletConstants.supportedCoinTypes())
let allAccounts = await keyringService.allAccounts()
let allNetworks = await rpcService.allNetworksForSupportedCoins()
self.allNetworks = allNetworks
// setup network filters if not currently setup
Expand All @@ -154,27 +154,26 @@ class SelectAccountTokenStore: ObservableObject {
}
let allVisibleUserAssets = assetManager.getAllVisibleAssetsInNetworkAssets(networks: allNetworks).flatMap { $0.tokens }
guard !Task.isCancelled else { return }
self.accountSections = allKeyrings.flatMap { keyring in
let tokensForCoin = allVisibleUserAssets.filter { $0.coin == keyring.coin }
return keyring.accountInfos.map { account in
let tokenBalances = tokensForCoin.compactMap { token in
let tokenNetwork = allNetworks.first(where: { $0.chainId == token.chainId }) ?? .init()
if tokenNetwork.supportedKeyrings.contains(keyring.id.rawValue as NSNumber) {
return AccountSection.TokenBalance(
token: token,
network: allNetworks.first(where: { $0.chainId == token.chainId }) ?? .init(),
balance: cachedBalance(for: token, in: account),
price: cachedPrice(for: token, in: account),
nftMetadata: cachedMetadata(for: token)
)
}
return nil
let tokensGroupedByCoinType = Dictionary(grouping: allVisibleUserAssets, by: \.coin)
self.accountSections = allAccounts.accounts.map { account in
let tokensForAccountCoin = tokensGroupedByCoinType[account.coin] ?? []
let tokenBalances = tokensForAccountCoin.compactMap { token in
let tokenNetwork = allNetworks.first(where: { $0.chainId == token.chainId }) ?? .init()
if tokenNetwork.supportedKeyrings.contains(account.keyringId.rawValue as NSNumber) {
return AccountSection.TokenBalance(
token: token,
network: allNetworks.first(where: { $0.chainId == token.chainId }) ?? .init(),
balance: cachedBalance(for: token, in: account),
price: cachedPrice(for: token, in: account),
nftMetadata: cachedMetadata(for: token)
)
}
return AccountSection(
account: account,
tokenBalances: tokenBalances
)
return nil
}
return AccountSection(
account: account,
tokenBalances: tokenBalances
)
}

updateAccountBalances()
Expand Down
2 changes: 1 addition & 1 deletion Sources/BraveWallet/Crypto/Stores/SendTokenStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,7 @@ extension SendTokenStore: BraveWalletKeyringServiceObserver {
public func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}

public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
public func walletRestored() {
}

public func locked() {
Expand Down
2 changes: 1 addition & 1 deletion Sources/BraveWallet/Crypto/Stores/SettingsStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ extension SettingsStore: BraveWalletKeyringServiceObserver {
public func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}

public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
public func walletRestored() {
}

public func keyringReset() {
Expand Down
2 changes: 1 addition & 1 deletion Sources/BraveWallet/Crypto/Stores/SwapTokenStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -890,7 +890,7 @@ extension SwapTokenStore: BraveWalletKeyringServiceObserver {
public func keyringCreated(_ keyringId: BraveWallet.KeyringId) {
}

public func keyringRestored(_ keyringId: BraveWallet.KeyringId) {
public func walletRestored() {
}

public func locked() {
Expand Down
Loading