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

Commit

Permalink
IOS-7227 Update content for activation error on send screen (#789)
Browse files Browse the repository at this point in the history
  • Loading branch information
AlekseiMuraveinik1 authored Aug 6, 2024
1 parent cc8f557 commit 3589f57
Show file tree
Hide file tree
Showing 21 changed files with 65 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class AlgorandNetworkService: MultiNetworkProvider {
.tryMap { response in
/// This paramenter mast be writen for building transaction
guard let genesisHash = Data(base64Encoded: response.genesisHash) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

let transactionParams = AlgorandTransactionBuildParams(
Expand Down Expand Up @@ -110,7 +110,7 @@ class AlgorandNetworkService: MultiNetworkProvider {
} else if confirmedRound == 0, !response.poolError.isEmpty {
return AlgorandTransactionInfo(transactionHash: transactionHash, status: .removed)
} else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}
}
.eraseToAnyPublisher()
Expand Down
6 changes: 3 additions & 3 deletions BlockchainSdk/Blockchains/Aptos/AptosNetworkService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ class AptosNetworkService: MultiNetworkProvider {
let accountJson = response.first(where: { $0.type == Constants.accountKeyPrefix }),
let coinJson = response.first(where: { $0.type == Constants.coinStoreKeyPrefix })
else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

guard
let balanceValue = Decimal(coinJson.data.coin?.value),
let sequenceNumber = Decimal(accountJson.data.sequenceNumber)
else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return AptosAccountInfo(sequenceNumber: sequenceNumber.int64Value, balance: balanceValue)
Expand Down Expand Up @@ -98,7 +98,7 @@ class AptosNetworkService: MultiNetworkProvider {
.submitTransaction(data: data)
.tryMap { response in
guard let transactionHash = response.hash else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return transactionHash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ struct ChiaNetworkProvider: HostProvider {
return response
}
.mapError { error in
return WalletError.failedToParseNetworkResponse
return WalletError.failedToParseNetworkResponse()
}
.eraseToAnyPublisher()
}
Expand Down
8 changes: 4 additions & 4 deletions BlockchainSdk/Blockchains/Cosmos/CosmosNetworkService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class CosmosNetworkService: MultiNetworkProvider {
let self,
let sequenceNumber = UInt64(accountInfo?.account.sequence ?? "0")
else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

let accountNumber: UInt64?
Expand Down Expand Up @@ -133,7 +133,7 @@ class CosmosNetworkService: MultiNetworkProvider {
private func cw20TokenBalance(walletAddress: String, token: Token) -> AnyPublisher<(Token, Decimal), Error> {
let request = CosmosCW20BalanceRequest(address: walletAddress)
guard let query = try? JSONEncoder().encode(request) else {
return .anyFail(error: WalletError.failedToParseNetworkResponse)
return .anyFail(error: WalletError.failedToParseNetworkResponse())
}

return providerPublisher {
Expand All @@ -142,7 +142,7 @@ class CosmosNetworkService: MultiNetworkProvider {
(result: CosmosCW20QueryResult<CosmosCW20QueryBalanceData>) -> (Token, Decimal) in

guard let balanceInSmallestDenomination = Decimal(string: result.data.balance) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

let balance = balanceInSmallestDenomination / token.decimalValue
Expand Down Expand Up @@ -195,7 +195,7 @@ class CosmosNetworkService: MultiNetworkProvider {
}

guard let balanceInSmallestDenomination = Int(balanceAmountString) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return Decimal(balanceInSmallestDenomination) / decimalValue
Expand Down
2 changes: 1 addition & 1 deletion BlockchainSdk/Blockchains/Cosmos/CosmosRestProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class CosmosRestProvider: HostProvider {
}

if case .objectMapping = moyaError {
return WalletError.failedToParseNetworkResponse
return WalletError.failedToParseNetworkResponse()
}
return moyaError
}
Expand Down
4 changes: 2 additions & 2 deletions BlockchainSdk/Blockchains/Ducatus/DucatusNetworkService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class DucatusNetworkService: BitcoinNetworkProvider {
.tryMap { balance, unspents throws -> BitcoinResponse in
guard let confirmed = balance.confirmed,
let unconfirmed = balance.unconfirmed else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

let utxs: [BitcoinUnspentOutput] = unspents.compactMap { utxo -> BitcoinUnspentOutput? in
Expand All @@ -52,7 +52,7 @@ class DucatusNetworkService: BitcoinNetworkProvider {
if let id = response.txid {
return id
} else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}
}.eraseToAnyPublisher()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class KaspaNetworkProvider: HostProvider {
.map(T.self, using: decoder)
.mapError { moyaError in
if case .objectMapping = moyaError {
return WalletError.failedToParseNetworkResponse
return WalletError.failedToParseNetworkResponse()
}
return moyaError
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ final class NEARNetworkService: MultiNetworkProvider {
.getGasPrice()
.tryMap { result in
guard let gasPrice = Decimal(string: result.gasPrice) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return gasPrice
Expand Down Expand Up @@ -98,7 +98,7 @@ final class NEARNetworkService: MultiNetworkProvider {
.getInfo(accountId: accountId)
.tryMap { result in
guard let rawAmount = Decimal(string: result.amount) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

let value = rawAmount / blockchain.decimalValue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class StellarNetworkProvider: HostProvider {

let baseReserveStroops = Decimal(ledgerResponse.baseReserveInStroops)
guard let balance = Decimal(accountResponse.balances.first(where: {$0.assetType == AssetTypeAsString.NATIVE})?.balance) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

let sequence = accountResponse.sequenceNumber
Expand All @@ -64,7 +64,7 @@ class StellarNetworkProvider: HostProvider {
guard let code = assetBalance.assetCode,
let issuer = assetBalance.assetIssuer,
let balance = Decimal(assetBalance.balance) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return StellarAssetResponse(code: code, issuer: issuer, balance: balance)
Expand Down
2 changes: 1 addition & 1 deletion BlockchainSdk/Blockchains/TON/TONNetworkService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class TONNetworkService: MultiNetworkProvider {
)
.tryMap { walletInfo, tokensInfo in
guard let decimalBalance = Decimal(string: walletInfo.balance) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return TONWalletInfo(
Expand Down
4 changes: 2 additions & 2 deletions BlockchainSdk/Blockchains/Tezos/TezosNetworkService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class TezosNetworkService: MultiNetworkProvider {
let balance = Decimal(string: balanceString),
let counterString = tezosAddress.counter,
let counter = Int(counterString) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

let balanceConverted = balance / Blockchain.tezos(curve: .ed25519).decimalValue
Expand All @@ -51,7 +51,7 @@ class TezosNetworkService: MultiNetworkProvider {
$0.getHeader()
.tryMap {headerResponse -> TezosHeader in
guard let proto = headerResponse.protocol, let hash = headerResponse.hash else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return TezosHeader(protocol: proto, hash: hash)
Expand Down
4 changes: 2 additions & 2 deletions BlockchainSdk/Blockchains/Tron/TronJsonRpcProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ class TronJsonRpcProvider: HostProvider {
.filterSuccessfulStatusAndRedirectCodes()
.map(T.self)
.mapError { moyaError in
if case .objectMapping = moyaError {
return WalletError.failedToParseNetworkResponse
if case let .objectMapping(_, response) = moyaError {
return WalletError.failedToParseNetworkResponse(response)
}
return moyaError
}
Expand Down
15 changes: 13 additions & 2 deletions BlockchainSdk/Blockchains/Tron/TronNetworkService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class TronNetworkService: MultiNetworkProvider {
let dynamicEnergyIncreaseFactorParameter = $0.chainParameter.first(where: { $0.key == "getDynamicEnergyIncreaseFactor" }),
let dynamicEnergyIncreaseFactor = dynamicEnergyIncreaseFactorParameter.value
else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return TronChainParameters(
Expand Down Expand Up @@ -82,6 +82,17 @@ class TronNetworkService: MultiNetworkProvider {
func getAccountResource(for address: String) -> AnyPublisher<TronGetAccountResourceResponse, Error> {
providerPublisher {
$0.getAccountResource(for: address)
.mapError { error in
if case let WalletError.failedToParseNetworkResponse(response) = error,
let data = response?.data,
let string = String(data: data, encoding: .utf8),
string.trimmingCharacters(in: .whitespacesAndNewlines) == "{}"
{
return WalletError.accountNotActivated
}
return error
}
.eraseToAnyPublisher()
}
}

Expand Down Expand Up @@ -163,7 +174,7 @@ class TronNetworkService: MultiNetworkProvider {
)

guard let decimalValue = Decimal(stringValue: formatted) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return (token, decimalValue)
Expand Down
2 changes: 1 addition & 1 deletion BlockchainSdk/Blockchains/Tron/TronUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import BigInt
struct TronUtils {
func combineBigUIntValueAtBalance(response constantResult: [String]) throws -> BigUInt {
guard let hexValue = constantResult.first else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

// Need use 32 byte for obtain right value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ final class VeChainNetworkService: MultiNetworkProvider {
.callContract(contractCall: contractCall)
.tryMap { contractCallResult in
guard let resultPayload = contractCallResult.first else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return resultPayload
Expand All @@ -87,7 +87,7 @@ final class VeChainNetworkService: MultiNetworkProvider {
return Amount(with: token, value: value)
}

throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}
.eraseToAnyPublisher()
}
Expand Down Expand Up @@ -118,7 +118,7 @@ final class VeChainNetworkService: MultiNetworkProvider {
.callContract(contractCall: contractCall)
.tryMap { contractCallResult in
guard let resultPayload = contractCallResult.first else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return resultPayload
Expand All @@ -143,7 +143,7 @@ final class VeChainNetworkService: MultiNetworkProvider {
return VeChainTransactionInfo(transactionHash: parsedStatus.id)
case .raw:
// `raw` output can't be easily parsed and therefore not supported
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
case .notFound:
return VeChainTransactionInfo(transactionHash: nil)
}
Expand All @@ -168,7 +168,7 @@ final class VeChainNetworkService: MultiNetworkProvider {
let bigUIntValue = BigUInt(balance.removeHexPrefix(), radix: Constants.radix),
let decimalValue = bigUIntValue.decimal
else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return decimalValue
Expand All @@ -184,7 +184,7 @@ final class VeChainNetworkService: MultiNetworkProvider {
rawBlockRef.count == Constants.blockRefSize * 2,
let blockRef = UInt(rawBlockRef, radix: Constants.radix)
else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return VeChainBlockInfo(
Expand Down
4 changes: 4 additions & 0 deletions BlockchainSdk/Common/API/MultiNetworkProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ extension MultiNetworkProvider {
return .anyFail(error: error)
}

if case WalletError.accountNotActivated = error {
return .anyFail(error: error)
}

Log.network("Switchable publisher catched error: \(error)")

let beforeSwitchIfNeededHost = self.host
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ extension AlgorandTransactionHistoryProvider: TransactionHistoryProvider {
return .init(records: records)
}
.mapError { moyaError -> Swift.Error in
return WalletError.failedToParseNetworkResponse
return WalletError.failedToParseNetworkResponse()
}
.eraseToAnyPublisher()
}
Expand Down
10 changes: 8 additions & 2 deletions BlockchainSdk/Common/WalletError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,20 @@
//

import Foundation
import Moya

public enum WalletError: Error, LocalizedError {
case noAccount(message: String, amountToCreate: Decimal)
case failedToGetFee
case failedToBuildTx
case failedToParseNetworkResponse
case failedToParseNetworkResponse(Response? = nil)
case failedToSendTx
case failedToCalculateTxSize
case empty
case blockchainUnavailable(underlyingError: Error)

case accountNotActivated

public var errorDescription: String? {
switch self {
case .noAccount(let message, _):
Expand All @@ -32,7 +35,8 @@ public enum WalletError: Error, LocalizedError {
return "Empty"
case .failedToCalculateTxSize,
.failedToParseNetworkResponse,
.blockchainUnavailable:
.blockchainUnavailable,
.accountNotActivated:
return "generic_error_code".localized(errorCodeDescription)
}
}
Expand All @@ -55,6 +59,8 @@ public enum WalletError: Error, LocalizedError {
return 7
case .blockchainUnavailable:
return 8
case .accountNotActivated:
return 9
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,17 @@ class BlockchairNetworkProvider: BitcoinNetworkProvider {
let script = address["script_hex"].stringValue

guard let decimalSatoshiBalance = Decimal(string: balance) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

guard let transactionsData = try? addr["transactions"].rawData(),
let transactions: [BlockchairTransactionShort] = try? self.jsonDecoder.decode([BlockchairTransactionShort].self, from: transactionsData) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

guard let utxoData = try? addr["utxo"].rawData(),
let utxos: [BlockchairUtxo] = try? self.jsonDecoder.decode([BlockchairUtxo].self, from: utxoData) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

// Unspents with blockId lower than or equal 1 is not currently available
Expand Down Expand Up @@ -174,7 +174,7 @@ class BlockchairNetworkProvider: BitcoinNetworkProvider {
let data = json["data"]

guard let hash = data["transaction_hash"].string else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return hash
Expand Down Expand Up @@ -213,7 +213,7 @@ class BlockchairNetworkProvider: BitcoinNetworkProvider {
let txJson = json["data"]["\(hash)"]

guard let tx = self.getTransactionDetails(from: txJson) else {
throw WalletError.failedToParseNetworkResponse
throw WalletError.failedToParseNetworkResponse()
}

return tx.toPendingTx(userAddress: address, decimalValue: self.endpoint.blockchain.decimalValue)
Expand Down
Loading

0 comments on commit 3589f57

Please sign in to comment.