diff --git a/Maskbook/Extension/UserDefaults+extension.swift b/Maskbook/Extension/UserDefaults+extension.swift index 26af5e24..7f1138ca 100644 --- a/Maskbook/Extension/UserDefaults+extension.swift +++ b/Maskbook/Extension/UserDefaults+extension.swift @@ -440,6 +440,7 @@ extension UserDefaultSettings { var hasRiskConfirmed: Bool { get { guard let address = defaultAccountAddress else { return false } + log.debug("\(confirmedPluginRiskWarnings) address: \(address)", source: "warning-confirm") return confirmedPluginRiskWarnings.contains(address) } } diff --git a/Maskbook/Wallet/WalletConnect/Client/WalletConnectClient.swift b/Maskbook/Wallet/WalletConnect/Client/WalletConnectClient.swift index 7fb652b7..aa5e0d30 100644 --- a/Maskbook/Wallet/WalletConnect/Client/WalletConnectClient.swift +++ b/Maskbook/Wallet/WalletConnect/Client/WalletConnectClient.swift @@ -10,6 +10,7 @@ import Combine import CoreDataStack import Foundation import WalletConnectSwift +import web3swift // swiftlint:disable force_unwrapping function_parameter_count line_length class WalletConnectClient { @@ -154,7 +155,12 @@ extension WalletConnectClient: ClientDelegate { disconnect(session: session) return } - guard let address = session.walletInfo?.accounts[safeIndex: 0] else { + guard let accounts: [String] = session.walletInfo?.accounts.compactMap({ + EthereumAddress.toChecksumAddress($0) ?? $0 + }) else { + return + } + guard let address = accounts.first else { disconnect(session: session) return } @@ -218,19 +224,23 @@ extension WalletConnectClient: ClientDelegate { func saveAccount(session: Session, address: String, network: BlockChainNetwork) { AppContext.shared.coreDataStack.persistentContainer.viewContext.perform { - if let accounts = session.walletInfo?.accounts { - for account in accounts { - let isNewAccount = WalletCoreStorage.addWalletConnectAccount(session: session, address: account) - if isNewAccount, network.networkId != self.userSetting.network.networkId { - self.delegate.showChangeNetworkAlert(networkFromSession: network, address: address) - } + guard let accounts: [String] = session.walletInfo?.accounts.compactMap({ + EthereumAddress.toChecksumAddress($0) ?? $0 + }) else { + return + } + for account in accounts { + let isNewAccount = WalletCoreStorage.addWalletConnectAccount(session: session, address: account) + if isNewAccount, network.networkId != self.userSetting.network.networkId { + self.delegate.showChangeNetworkAlert(networkFromSession: network, address: address) } } } } func removeAccountFromSession(session: Session) { - guard let address = session.walletInfo?.accounts[0] else { return } + guard let rawAddress = session.walletInfo?.accounts.first else { return } + let address = EthereumAddress.toChecksumAddress(rawAddress) ?? rawAddress AppContext.shared.coreDataStack.persistentContainer.viewContext.perform { if let account = WalletCoreStorage.getAccount(address: address) { guard account.fromWalletConnect else { return } diff --git a/Maskbook/Wallet/WalletCore/WalletCoreStorage.swift b/Maskbook/Wallet/WalletCore/WalletCoreStorage.swift index b6508129..8338f8b3 100644 --- a/Maskbook/Wallet/WalletCore/WalletCoreStorage.swift +++ b/Maskbook/Wallet/WalletCore/WalletCoreStorage.swift @@ -167,9 +167,7 @@ extension WalletCoreStorage { try viewContext.saveOrRollback() return false } - // Here is the conversion of some abnormal addresses returned from metamask to normal addresses. - let checksumAddress = EthereumAddress.toChecksumAddress(address) ?? address - let account = Account(session: session, address: checksumAddress) + let account = Account(session: session, address: address) viewContext.insert(account) try viewContext.saveOrRollback() return true