From 7fcf5b00080912bf4f91994c2ab5ee56170ed567 Mon Sep 17 00:00:00 2001 From: Oleg Date: Thu, 2 May 2024 15:59:52 +0700 Subject: [PATCH 1/3] Added parent token description to token Do not show max token amount pull up for ERC20 token Exclude gas fee from checkout screen for ERC20 token --- .../Entities/BalanceTokenUIDescription.swift | 42 +++++++++++-------- .../Modules/BalanceTokenIconsView.swift | 2 +- .../ConfirmSendTokenDataModel.swift | 2 +- .../ConfirmSendTokenView.swift | 3 +- .../SelectTokenAssetAmountToSendView.swift | 4 +- .../WalletsDataService.swift | 2 +- 6 files changed, 32 insertions(+), 23 deletions(-) diff --git a/unstoppable-ios-app/domains-manager-ios/Entities/BalanceTokenUIDescription.swift b/unstoppable-ios-app/domains-manager-ios/Entities/BalanceTokenUIDescription.swift index b500c853c..68617cfe9 100644 --- a/unstoppable-ios-app/domains-manager-ios/Entities/BalanceTokenUIDescription.swift +++ b/unstoppable-ios-app/domains-manager-ios/Entities/BalanceTokenUIDescription.swift @@ -18,18 +18,32 @@ struct BalanceTokenUIDescription: Hashable, Identifiable { let balanceUsd: Double var marketUsd: Double? var marketPctChange24Hr: Double? - var parentSymbol: String? var logoURL: URL? - var parentLogoURL: URL? - var parentMarketUSD: Double? + var parent: ParentDetails? private(set) var isSkeleton: Bool = false + struct ParentDetails: Hashable { + var symbol: String + var balance: Double + var marketUsd: Double? + var logoURL: URL? + + init(token: WalletTokenPortfolio) { + symbol = token.symbol + balance = token.balanceAmt + marketUsd = token.value.marketUsdAmt + logoURL = URL(string: token.logoUrl ?? "") + } + } + static let iconSize: InitialsView.InitialsSize = .default static let iconStyle: InitialsView.Style = .gray + var isERC20Token: Bool { parent != nil } + var balanceSymbol: String { // For 'parent' token we show gas currency (which is ETH for Base token) - if parentSymbol == nil { + if parent == nil { return gasCurrency } return symbol @@ -66,9 +80,7 @@ struct BalanceTokenUIDescription: Hashable, Identifiable { init(chain: String, walletToken: WalletTokenPortfolio.Token, - parentSymbol: String, - parentMarketUSD: Double?, - parentLogoURL: URL?) { + parent: ParentDetails) { self.chain = chain self.symbol = walletToken.symbol self.gasCurrency = walletToken.gasCurrency @@ -77,23 +89,17 @@ struct BalanceTokenUIDescription: Hashable, Identifiable { self.balanceUsd = walletToken.value?.walletUsdAmt ?? 0 self.marketUsd = walletToken.value?.marketUsdAmt ?? 0 self.marketPctChange24Hr = walletToken.value?.marketPctChange24Hr - self.parentSymbol = parentSymbol - self.parentMarketUSD = parentMarketUSD - self.parentLogoURL = parentLogoURL + self.parent = parent self.logoURL = URL(string: walletToken.logoUrl ?? "") } static func extractFrom(walletBalance: WalletTokenPortfolio) -> [BalanceTokenUIDescription] { let tokenDescription = BalanceTokenUIDescription(walletBalance: walletBalance) - let parentSymbol = walletBalance.symbol - let parentMarketUSD = walletBalance.value.marketUsdAmt - let parentLogoURL = URL(string: walletBalance.logoUrl ?? "") + let parent = ParentDetails(token: walletBalance) let chainSymbol = walletBalance.symbol let subTokenDescriptions = walletBalance.tokens?.map({ BalanceTokenUIDescription(chain: chainSymbol, walletToken: $0, - parentSymbol: parentSymbol, - parentMarketUSD: parentMarketUSD, - parentLogoURL: parentLogoURL) }) + parent: parent) }) .filter({ $0.balanceUsd >= 1 }) ?? [] return [tokenDescription] + subTokenDescriptions @@ -122,8 +128,8 @@ extension BalanceTokenUIDescription { } func loadParentIcon(iconUpdated: @escaping (UIImage?)->()) { - if let parentSymbol { - BalanceTokenUIDescription.loadIconFor(ticker: parentSymbol, logoURL: parentLogoURL, iconUpdated: iconUpdated) + if let parentSymbol = parent?.symbol { + BalanceTokenUIDescription.loadIconFor(ticker: parentSymbol, logoURL: parent?.logoURL, iconUpdated: iconUpdated) } else { iconUpdated(nil) } diff --git a/unstoppable-ios-app/domains-manager-ios/Modules/BalanceTokenIconsView.swift b/unstoppable-ios-app/domains-manager-ios/Modules/BalanceTokenIconsView.swift index fa3fb0646..533fe41de 100644 --- a/unstoppable-ios-app/domains-manager-ios/Modules/BalanceTokenIconsView.swift +++ b/unstoppable-ios-app/domains-manager-ios/Modules/BalanceTokenIconsView.swift @@ -23,7 +23,7 @@ struct BalanceTokenIconsView: View { .skeletonable() .clipShape(Circle()) - if token.parentSymbol != nil { + if token.parent != nil { Image(uiImage: parentIcon ?? .init()) .resizable() .squareFrame(20) diff --git a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenDataModel.swift b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenDataModel.swift index 57facc27f..b6a1e2633 100644 --- a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenDataModel.swift +++ b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenDataModel.swift @@ -19,7 +19,7 @@ final class ConfirmSendTokenDataModel: ObservableObject { var amount: SendCryptoAsset.TokenAssetAmountInput { data.amount } var gasFeeUsd: Double? { if let gasFee, - let marketUsd = data.token.parentMarketUSD ?? data.token.marketUsd { + let marketUsd = data.token.parent?.marketUsd ?? data.token.marketUsd { return gasFee * marketUsd } return nil diff --git a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift index cc12a010b..6903e9bac 100644 --- a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift +++ b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift @@ -223,7 +223,8 @@ private extension ConfirmSendTokenView { func totalValue(gasFee: Double) -> Double { let sendData = dataModel.data var amountToSpend = sendData.amount.valueOf(type: .tokenAmount, for: token) - if !sendData.isSendingAllTokens() { + if !sendData.isSendingAllTokens(), + !token.isERC20Token { amountToSpend += gasFee } return amountToSpend diff --git a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/SelectTokenAssetAmount/SelectTokenAssetAmountToSendView.swift b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/SelectTokenAssetAmount/SelectTokenAssetAmountToSendView.swift index 5505b0994..2dd88d7e6 100644 --- a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/SelectTokenAssetAmount/SelectTokenAssetAmountToSendView.swift +++ b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/SelectTokenAssetAmount/SelectTokenAssetAmountToSendView.swift @@ -246,7 +246,9 @@ private extension SelectTokenAssetAmountToSendView { func maxButtonPressed() { guard !isUsingMax else { return } - pullUp = .default(.maxCryptoSendInfoPullUp(token: token)) + if !token.isERC20Token { + pullUp = .default(.maxCryptoSendInfoPullUp(token: token)) + } setMaxInputValue() } diff --git a/unstoppable-ios-app/domains-manager-ios/Services/WalletsDataService/WalletsDataService.swift b/unstoppable-ios-app/domains-manager-ios/Services/WalletsDataService/WalletsDataService.swift index 6a3e8b589..3e9dd92d5 100644 --- a/unstoppable-ios-app/domains-manager-ios/Services/WalletsDataService/WalletsDataService.swift +++ b/unstoppable-ios-app/domains-manager-ios/Services/WalletsDataService/WalletsDataService.swift @@ -274,7 +274,7 @@ private extension WalletsDataService { if pendingTransactions.filterPending(extraCondition: { $0.operation == .transferDomain }).first(where: { $0.domainName == domain.name }) != nil { domainState = .transfer } else if pendingTransactions.containMintingInProgress(domain) { - domainState = .minting + domainState = .transfer } else if pendingTransactions.containReverseResolutionOperationProgress(domain) { domainState = .updatingReverseResolution } else if pendingTransactions.containPending(domain) { From 7aca12ac7d2a92e9b743fc9d6c13e202763391a4 Mon Sep 17 00:00:00 2001 From: Oleg Date: Tue, 14 May 2024 20:53:01 +0700 Subject: [PATCH 2/3] Handle insufficient parent token balance --- .../Entities/PreviewCryptoSender.swift | 2 +- .../Entities/BalanceTokenUIDescription.swift | 11 +++- .../Entities/Mock/MockEntitiesFabric.swift | 14 +++- .../Extensions/Extension-String+Preview.swift | 1 + .../ConfirmSendAssetReviewInfoView.swift | 64 +++++++++++++++---- .../ConfirmSendTokenDataModel.swift | 2 +- .../ConfirmSendTokenView.swift | 41 ++++++++---- .../Localization/en.lproj/Localizable.strings | 1 + 8 files changed, 108 insertions(+), 28 deletions(-) diff --git a/unstoppable-ios-app/domains-manager-ios-preview/Entities/PreviewCryptoSender.swift b/unstoppable-ios-app/domains-manager-ios-preview/Entities/PreviewCryptoSender.swift index 404e43dbf..cfde297bd 100644 --- a/unstoppable-ios-app/domains-manager-ios-preview/Entities/PreviewCryptoSender.swift +++ b/unstoppable-ios-app/domains-manager-ios-preview/Entities/PreviewCryptoSender.swift @@ -22,7 +22,7 @@ struct CryptoSender: CryptoSenderProtocol { } func computeGasFeeFrom(maxCrypto: CryptoSendingSpec, on chain: ChainSpec, toAddress: HexAddress) async throws -> EVMCoinAmount { - .init(wei: 12300) + .init(units: 0.11) } func fetchGasPrices(on chain: ChainSpec) async throws -> EstimatedGasPrices { diff --git a/unstoppable-ios-app/domains-manager-ios/Entities/BalanceTokenUIDescription.swift b/unstoppable-ios-app/domains-manager-ios/Entities/BalanceTokenUIDescription.swift index 68617cfe9..c82720d7c 100644 --- a/unstoppable-ios-app/domains-manager-ios/Entities/BalanceTokenUIDescription.swift +++ b/unstoppable-ios-app/domains-manager-ios/Entities/BalanceTokenUIDescription.swift @@ -28,6 +28,13 @@ struct BalanceTokenUIDescription: Hashable, Identifiable { var marketUsd: Double? var logoURL: URL? + init(symbol: String, balance: Double, marketUsd: Double? = nil, logoURL: URL? = nil) { + self.symbol = symbol + self.balance = balance + self.marketUsd = marketUsd + self.logoURL = logoURL + } + init(token: WalletTokenPortfolio) { symbol = token.symbol balance = token.balanceAmt @@ -67,7 +74,8 @@ struct BalanceTokenUIDescription: Hashable, Identifiable { balance: Double, balanceUsd: Double, marketUsd: Double? = nil, - marketPctChange24Hr: Double? = nil) { + marketPctChange24Hr: Double? = nil, + parent: ParentDetails? = nil) { self.chain = chain self.symbol = symbol self.gasCurrency = symbol @@ -76,6 +84,7 @@ struct BalanceTokenUIDescription: Hashable, Identifiable { self.balanceUsd = balanceUsd self.marketUsd = marketUsd self.marketPctChange24Hr = marketPctChange24Hr + self.parent = parent } init(chain: String, diff --git a/unstoppable-ios-app/domains-manager-ios/Entities/Mock/MockEntitiesFabric.swift b/unstoppable-ios-app/domains-manager-ios/Entities/Mock/MockEntitiesFabric.swift index f66307c6b..6dd568b4b 100644 --- a/unstoppable-ios-app/domains-manager-ios/Entities/Mock/MockEntitiesFabric.swift +++ b/unstoppable-ios-app/domains-manager-ios/Entities/Mock/MockEntitiesFabric.swift @@ -226,12 +226,24 @@ extension MockEntitiesFabric { mockEthToken() } + static func mockUSDTToken(parent: BlockchainType = .Ethereum) -> BalanceTokenUIDescription { + BalanceTokenUIDescription(chain: "ETH", + symbol: "USDT", + name: "USDT", + balance: 10, + balanceUsd: 10, + marketUsd: 1, + parent: .init(symbol: parent.rawValue, + balance: 0, + marketUsd: 3900)) + } + static func mockEthToken() -> BalanceTokenUIDescription { BalanceTokenUIDescription(chain: "ETH", symbol: "ETH", name: "Ethereum", balance: 1, - balanceUsd: 1, + balanceUsd: 3900.34, marketUsd: 3900.34) } diff --git a/unstoppable-ios-app/domains-manager-ios/Extensions/Extension-String+Preview.swift b/unstoppable-ios-app/domains-manager-ios/Extensions/Extension-String+Preview.swift index 287b3310d..da11bfddd 100644 --- a/unstoppable-ios-app/domains-manager-ios/Extensions/Extension-String+Preview.swift +++ b/unstoppable-ios-app/domains-manager-ios/Extensions/Extension-String+Preview.swift @@ -624,6 +624,7 @@ extension String { static let balance = "BALANCE" static let estimatedFee = "ESTIMATED_FEE" static let insufficientBalance = "INSUFFICIENT_BALANCE" + static let insufficientToken = "INSUFFICIENT_TOKEN" static let network = "NETWORK" static let walletVerifiedInfoTitle = "WALLET_VERIFIED_INFO_TITLE" diff --git a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendAssetReviewInfoView.swift b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendAssetReviewInfoView.swift index 48140e92a..fd4bb90c7 100644 --- a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendAssetReviewInfoView.swift +++ b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendAssetReviewInfoView.swift @@ -110,19 +110,31 @@ private extension ConfirmSendAssetReviewInfoView { .foregroundStyle(Color.foregroundSecondary) Spacer() } - .frame(width: geom.size.width * 0.38) + .frame(width: geom.size.width * 0.38) HStack(spacing: 8) { UIImageBridgeView(image: info.icon, tintColor: info.iconColor) .squareFrame(24) .clipShape(Circle()) - Text(info.value) - .font(.currentFont(size: 16, weight: .medium)) - .foregroundStyle(info.valueColor) - if let subValue = info.subValue { - Text(subValue) - .font(.currentFont(size: 16, weight: .medium)) - .foregroundStyle(Color.foregroundSecondary) + VStack(alignment: .leading, + spacing: -4) { + HStack(spacing: 8) { + Text(info.value) + .font(.currentFont(size: 16, weight: .medium)) + .frame(height: 24) + .foregroundStyle(info.valueColor) + if let subValue = info.subValue { + Text(subValue) + .font(.currentFont(size: 16, weight: .medium)) + .foregroundStyle(Color.foregroundSecondary) + } + } + if let errorMessage = info.errorMessage { + Text(errorMessage) + .font(.currentFont(size: 15, weight: .medium)) + .foregroundStyle(Color.foregroundDanger) + .frame(height: 24) + } } } Spacer() @@ -157,6 +169,7 @@ private extension ConfirmSendAssetReviewInfoView { let value: String var valueColor: Color = .foregroundDefault var subValue: String? = nil + var errorMessage: String? = nil var actions: [InfoActionDescription] = [] var analyticName: Analytics.Button? = nil } @@ -198,7 +211,9 @@ private extension ConfirmSendAssetReviewInfoView { switch asset { case .token(let dataModel): getSectionsForToken(selectedTxSpeed: dataModel.txSpeed, - gasUsd: dataModel.gasFeeUsd) + gasUsd: dataModel.gasFeeUsd, + gasFee: dataModel.gasFee, + token: dataModel.token) case .domain: getSectionsForDomain() } @@ -245,7 +260,9 @@ private extension ConfirmSendAssetReviewInfoView { } func getSectionsForToken(selectedTxSpeed: SendCryptoAsset.TransactionSpeed, - gasUsd: Double?) -> [SectionType] { + gasUsd: Double?, + gasFee: Double?, + token: BalanceTokenUIDescription) -> [SectionType] { [getFromWalletInfoSection(), getChainInfoSection(), .infoValue(.init(title: String.Constants.speed.localized(), @@ -255,12 +272,33 @@ private extension ConfirmSendAssetReviewInfoView { valueColor: Color(uiColor: tintColorFor(txSpeed: selectedTxSpeed)), actions: getTransactionSpeedActions(), analyticName: .transactionSpeedSelection)), - .infoValue(.init(title: String.Constants.feeEstimate.localized(), - icon: .tildaIcon, - value: gasUsdTitleFor(gasUsd: gasUsd))), + getGasFeeSection(gasUsd: gasUsd, + gasFee: gasFee, + token: token), .info(String.Constants.sendCryptoReviewPromptMessage.localized())] } + func getGasFeeErrorMessage(gasFee: Double?, + token: BalanceTokenUIDescription) -> String? { + guard let gasFee else { return nil } + + if let parent = token.parent, + parent.balance <= gasFee { + return String.Constants.insufficientToken.localized(parent.symbol) + } + return nil + } + + func getGasFeeSection(gasUsd: Double?, + gasFee: Double?, + token: BalanceTokenUIDescription) -> SectionType { + .infoValue(.init(title: String.Constants.feeEstimate.localized(), + icon: .tildaIcon, + value: gasUsdTitleFor(gasUsd: gasUsd), + errorMessage: getGasFeeErrorMessage(gasFee: gasFee, + token: token))) + } + func getFromWalletInfoSection() -> SectionType { .infoValue(.init(title: String.Constants.from.localized(), icon: fromUserAvatar ?? sourceWallet.displayInfo.source.listIcon, diff --git a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenDataModel.swift b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenDataModel.swift index b6a1e2633..88f911fcf 100644 --- a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenDataModel.swift +++ b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenDataModel.swift @@ -24,7 +24,7 @@ final class ConfirmSendTokenDataModel: ObservableObject { } return nil } - + init(data: SendCryptoAsset.SendTokenAssetData) { self.data = data } diff --git a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift index 6903e9bac..aa5deb6dc 100644 --- a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift +++ b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift @@ -177,19 +177,28 @@ private extension ConfirmSendTokenView { guard let gasFee = dataModel.gasFee else { return true } let sendData = dataModel.data - let balance = sendData.token.balance - if sendData.isSendingAllTokens() { - return balance >= gasFee - } + let token = sendData.token - let tokenAmountToSend = sendData.getTokenAmountValueToSend() - return balance > tokenAmountToSend + gasFee + if let parent = token.parent { // ERC20 Token + let parentBalance = parent.balance + print(parentBalance) + return parentBalance >= gasFee + } else { + let balance = token.balance + if sendData.isSendingAllTokens() { + return balance >= gasFee + } + + let tokenAmountToSend = sendData.getTokenAmountValueToSend() + return balance > tokenAmountToSend + gasFee + } } @ViewBuilder func confirmButton() -> some View { VStack(spacing: isIPSE ? 6 : 16) { - if !hasSufficientFunds { + if !hasSufficientFunds, + !dataModel.token.isERC20Token { insufficientFundsLabel() } else { totalValueLabel() @@ -234,7 +243,13 @@ private extension ConfirmSendTokenView { guard let marketUsd = token.marketUsd else { return "" } let amountToSpend = totalValue(gasFee: gasFee) - let amountInUSD = amountToSpend * marketUsd + var amountInUSD = amountToSpend * marketUsd + + if let parent = token.parent, // ERC20Token + let parentMarketUsd = parent.marketUsd { + amountInUSD += gasFee * parentMarketUsd + } + let formattedUSDAmount = formatCartPrice(amountInUSD) return formattedUSDAmount } @@ -251,7 +266,11 @@ private extension ConfirmSendTokenView { HStack(alignment: .top) { Text(String.Constants.totalEstimate.localized()) Spacer() - Text("\(totalValueInUSD(gasFee: gasFee)) \(totalValueFormatted(gasFee: gasFee))") + if token.isERC20Token { + Text("\(totalValueInUSD(gasFee: gasFee))") + } else { + Text("\(totalValueInUSD(gasFee: gasFee)) \(totalValueFormatted(gasFee: gasFee))") + } } .font(.currentFont(size: 16)) .foregroundStyle(Color.foregroundSecondary) @@ -275,8 +294,8 @@ private extension ConfirmSendTokenView { PresentAsModalPreviewView { NavigationStack { ConfirmSendTokenView(data: .init(receiver: MockEntitiesFabric.SendCrypto.mockReceiver(), - token: MockEntitiesFabric.Tokens.mockUIToken(), - amount: .usdAmount(3998234.3), + token: MockEntitiesFabric.Tokens.mockUSDTToken(), + amount: .tokenAmount(0.999), receiverAddress: "0x1234567890")) .navigationBarTitleDisplayMode(.inline) } diff --git a/unstoppable-ios-app/domains-manager-ios/SupportingFiles/Localization/en.lproj/Localizable.strings b/unstoppable-ios-app/domains-manager-ios/SupportingFiles/Localization/en.lproj/Localizable.strings index a22d9da86..b6665f4d0 100644 --- a/unstoppable-ios-app/domains-manager-ios/SupportingFiles/Localization/en.lproj/Localizable.strings +++ b/unstoppable-ios-app/domains-manager-ios/SupportingFiles/Localization/en.lproj/Localizable.strings @@ -518,6 +518,7 @@ "BALANCE" = "Balance"; "ESTIMATED_FEE" = "Estimated fee"; "INSUFFICIENT_BALANCE" = "Insufficient balance"; +"INSUFFICIENT_TOKEN" = "Insufficient %@"; "NETWORK" = "Network"; "WALLET_VERIFIED_INFO_TITLE" = "Verified"; From 8c3a80d5e0fb7da028d5cd74cb67601c54922935 Mon Sep 17 00:00:00 2001 From: Oleg Date: Tue, 14 May 2024 21:17:30 +0700 Subject: [PATCH 3/3] Cleaning --- .../ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift index aa5deb6dc..b774c0695 100644 --- a/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift +++ b/unstoppable-ios-app/domains-manager-ios/Modules/Home/SendCryptoAsset/ConfirmSend/ConfirmSendToken/ConfirmSendTokenView.swift @@ -181,7 +181,6 @@ private extension ConfirmSendTokenView { if let parent = token.parent { // ERC20 Token let parentBalance = parent.balance - print(parentBalance) return parentBalance >= gasFee } else { let balance = token.balance