From 58560600884c8e12181d0a6e978aef79bf94a004 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 19 Jul 2022 17:53:58 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/common/extensions/WalletManager.kt | 7 +++-- .../com/tangem/tap/domain/TangemSigner.kt | 12 +++++--- .../domain/extensions/WalletManagerFactory.kt | 9 +++--- .../statePrinter/WalletStateConverter.kt | 1 - .../walletconnect/WalletConnectSdkHelper.kt | 28 +++++++++++++----- .../tangem/tap/features/demo/DemoHelper.kt | 7 +++-- .../tangem/tap/features/demo/Extentions.kt | 4 +-- .../redux/middlewares/RequestFeeMiddleware.kt | 5 ++-- .../send/redux/middlewares/SendMiddleware.kt | 29 ++++++++++++++----- 9 files changed, 68 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt b/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt index 40acdd1b7d..39e0103066 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/WalletManager.kt @@ -8,7 +8,7 @@ import com.tangem.tap.common.TestActions import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.amountToCreateAccount import com.tangem.tap.domain.getFirstToken -import com.tangem.tap.features.demo.isDemoWallet +import com.tangem.tap.features.demo.isDemoCard import com.tangem.tap.features.wallet.redux.AddressData import com.tangem.tap.features.wallet.redux.reducers.createAddressesData import com.tangem.tap.network.NetworkConnectivity @@ -21,7 +21,10 @@ import timber.log.Timber [REDACTED_AUTHOR] */ suspend fun WalletManager.safeUpdate(): Result = try { - if (isDemoWallet() || TestActions.testAmountInjectionForWalletManagerEnabled) { + val scanResponse = store.state.globalState.scanResponse + ?: error("Scan response must not be null") + + if (scanResponse.isDemoCard() || TestActions.testAmountInjectionForWalletManagerEnabled) { delay(500) TestActions.testAmountInjectionForWalletManagerEnabled = false Result.Success(wallet) diff --git a/app/src/main/java/com/tangem/tap/domain/TangemSigner.kt b/app/src/main/java/com/tangem/tap/domain/TangemSigner.kt index 20d1eda08c..9de7e68894 100644 --- a/app/src/main/java/com/tangem/tap/domain/TangemSigner.kt +++ b/app/src/main/java/com/tangem/tap/domain/TangemSigner.kt @@ -16,12 +16,14 @@ class TangemSigner( private val signerCallback: (TangemSignerResponse) -> Unit, ) : TransactionSigner { - override suspend fun sign(hash: ByteArray, cardId: String, publicKey: Wallet.PublicKey): CompletionResult { + override suspend fun sign( + hash: ByteArray, + publicKey: Wallet.PublicKey + ): CompletionResult { return suspendCoroutine { continuation -> val command = SignHashTask(hash, publicKey) tangemSdk.startSessionWithRunnable( runnable = command, - cardId = cardId, initialMessage = initialMessage, ) { result -> when (result) { @@ -41,12 +43,14 @@ class TangemSigner( } } - override suspend fun sign(hashes: List, cardId: String, publicKey: Wallet.PublicKey): CompletionResult> { + override suspend fun sign( + hashes: List, + publicKey: Wallet.PublicKey + ): CompletionResult> { return suspendCoroutine { continuation -> val task = SignHashesTask(hashes, publicKey) tangemSdk.startSessionWithRunnable( runnable = task, - cardId = cardId, initialMessage = initialMessage, ) { result -> when (result) { diff --git a/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt b/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt index e636c4fa07..34b8289884 100644 --- a/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt +++ b/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt @@ -32,9 +32,10 @@ fun WalletManagerFactory.makeWalletManagerForApp( return when { scanResponse.isTangemTwins() && scanResponse.secondTwinPublicKey != null -> { makeTwinWalletManager( - card.cardId, - wallet.publicKey, scanResponse.secondTwinPublicKey!!.hexToBytes(), - environmentBlockchain, wallet.curve + walletPublicKey = wallet.publicKey, + pairPublicKey = scanResponse.secondTwinPublicKey!!.hexToBytes(), + blockchain = environmentBlockchain, + curve = wallet.curve ) } seedKey != null && derivationParams != null -> { @@ -47,7 +48,6 @@ fun WalletManagerFactory.makeWalletManagerForApp( ?: return null makeWalletManager( - cardId = card.cardId, blockchain = environmentBlockchain, seedKey = wallet.publicKey, derivedKey = derivedKey, @@ -56,7 +56,6 @@ fun WalletManagerFactory.makeWalletManagerForApp( } else -> { makeWalletManager( - cardId = card.cardId, blockchain = environmentBlockchain, walletPublicKey = wallet.publicKey, curve = wallet.curve diff --git a/app/src/main/java/com/tangem/tap/domain/statePrinter/WalletStateConverter.kt b/app/src/main/java/com/tangem/tap/domain/statePrinter/WalletStateConverter.kt index 07ac4886bb..57762aaf51 100644 --- a/app/src/main/java/com/tangem/tap/domain/statePrinter/WalletStateConverter.kt +++ b/app/src/main/java/com/tangem/tap/domain/statePrinter/WalletStateConverter.kt @@ -57,7 +57,6 @@ class WalletStateConverter : StringStateConverter { walletMap["publicKey"] = publicKeyMap walletMap["amounts"] = amounts walletMap["addresses"] = wallet.addresses.toString() - walletMap["cardId"] = wallet.cardId return walletMap } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt index 1d0dc4a9e0..a3b0d31a89 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt @@ -5,8 +5,17 @@ import com.tangem.blockchain.blockchains.ethereum.EthereumGasLoader import com.tangem.blockchain.blockchains.ethereum.EthereumTransactionExtras import com.tangem.blockchain.blockchains.ethereum.EthereumUtils import com.tangem.blockchain.blockchains.ethereum.EthereumUtils.Companion.toKeccak -import com.tangem.blockchain.common.* -import com.tangem.blockchain.extensions.* +import com.tangem.blockchain.common.Amount +import com.tangem.blockchain.common.AmountType +import com.tangem.blockchain.common.CommonSigner +import com.tangem.blockchain.common.TransactionData +import com.tangem.blockchain.common.TransactionSender +import com.tangem.blockchain.common.Wallet +import com.tangem.blockchain.common.WalletManager +import com.tangem.blockchain.extensions.Result +import com.tangem.blockchain.extensions.SimpleResult +import com.tangem.blockchain.extensions.hexToBigDecimal +import com.tangem.blockchain.extensions.isAscii import com.tangem.common.CompletionResult import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.hexToBytes @@ -17,7 +26,11 @@ import com.tangem.operations.sign.SignHashCommand import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.extensions.toFormattedString -import com.tangem.tap.features.details.redux.walletconnect.* +import com.tangem.tap.features.details.redux.walletconnect.WalletConnectSession +import com.tangem.tap.features.details.redux.walletconnect.WalletForSession +import com.tangem.tap.features.details.redux.walletconnect.WcPersonalSignData +import com.tangem.tap.features.details.redux.walletconnect.WcTransactionData +import com.tangem.tap.features.details.redux.walletconnect.WcTransactionType import com.tangem.tap.features.details.ui.walletconnect.dialogs.PersonalSignDialogData import com.tangem.tap.features.details.ui.walletconnect.dialogs.TransactionRequestDialogData import com.tangem.tap.store @@ -25,8 +38,8 @@ import com.tangem.tap.tangemSdk import com.tangem.tap.tangemSdkManager import com.trustwallet.walletconnect.models.ethereum.WCEthereumSignMessage import com.trustwallet.walletconnect.models.ethereum.WCEthereumTransaction -import timber.log.Timber import java.math.BigDecimal +import timber.log.Timber class WalletConnectSdkHelper { @@ -108,9 +121,8 @@ class WalletConnectSdkHelper { ) val blockchain = session.wallet.getBlockchainForSession() return factory.makeWalletManager( - session.wallet.cardId, - blockchain, - publicKey + blockchain = blockchain, + publicKey = publicKey ) } @@ -124,7 +136,7 @@ class WalletConnectSdkHelper { private suspend fun sendTransaction(data: WcTransactionData): String? { val result = (data.walletManager as TransactionSender).send( transactionData = data.transaction, - signer = Signer(tangemSdk) + signer = CommonSigner(tangemSdk) ) return when (result) { SimpleResult.Success -> { diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt index 7fe717e1a5..f7ccf6156a 100644 --- a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt @@ -109,7 +109,7 @@ class DemoConfig { testDemoCardIds).distinct() } - private val releaseDemoCardIds = mutableListOf( + private val releaseDemoCardIds = mutableListOf( // Tangem Wallet: "AC01000000041100", "AC01000000042462", @@ -284,7 +284,10 @@ class DemoTransactionSender( override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult { val dataToSign = randomString(32).toByteArray() - val signerResponse = signer.sign(dataToSign, walletManager.wallet.cardId, walletManager.wallet.publicKey) + val signerResponse = signer.sign( + hash = dataToSign, + publicKey = walletManager.wallet.publicKey + ) return when (signerResponse) { is CompletionResult.Success -> SimpleResult.Failure(Exception(ID)) is CompletionResult.Failure -> SimpleResult.fromTangemSdkError(signerResponse.error) diff --git a/app/src/main/java/com/tangem/tap/features/demo/Extentions.kt b/app/src/main/java/com/tangem/tap/features/demo/Extentions.kt index 99ecfbc227..66d09bdbf0 100644 --- a/app/src/main/java/com/tangem/tap/features/demo/Extentions.kt +++ b/app/src/main/java/com/tangem/tap/features/demo/Extentions.kt @@ -1,10 +1,10 @@ package com.tangem.tap.features.demo -import com.tangem.blockchain.common.WalletManager +import com.tangem.common.card.Card import com.tangem.domain.common.ScanResponse /** [REDACTED_AUTHOR] */ fun ScanResponse.isDemoCard(): Boolean = DemoHelper.isDemoCardId(card.cardId) -fun WalletManager.isDemoWallet(): Boolean = DemoHelper.isDemoCardId(wallet.cardId) \ No newline at end of file +fun Card.isDemoCard(): Boolean = DemoHelper.isDemoCardId(cardId) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/RequestFeeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/RequestFeeMiddleware.kt index 29165f8bad..cd4075a0ca 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/RequestFeeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/RequestFeeMiddleware.kt @@ -7,7 +7,7 @@ import com.tangem.blockchain.extensions.Result import com.tangem.common.extensions.isZero import com.tangem.tap.common.redux.AppState import com.tangem.tap.features.demo.DemoTransactionSender -import com.tangem.tap.features.demo.isDemoWallet +import com.tangem.tap.features.demo.isDemoCard import com.tangem.tap.features.send.redux.AmountActionUi import com.tangem.tap.features.send.redux.FeeAction import com.tangem.tap.features.send.redux.ReceiptAction @@ -28,6 +28,7 @@ class RequestFeeMiddleware { fun handle(appState: AppState?, dispatch: DispatchFunction) { val sendState = appState?.sendState ?: return val walletManager = sendState.walletManager ?: return + val scanResponse = appState.globalState.scanResponse ?: return if (!SendState.isReadyToRequestFee()) { dispatch(FeeAction.FeeCalculation.SetFeeError(FeeAction.Error.ADDRESS_OR_AMOUNT_IS_EMPTY)) @@ -40,7 +41,7 @@ class RequestFeeMiddleware { val destinationAddress = sendState.addressPayIdState.destinationWalletAddress!! val destinationAmount = Amount(typedAmount, sendState.amountState.amountToSendCrypto) - val txSender = if (walletManager.isDemoWallet()) { + val txSender = if (scanResponse.isDemoCard()) { DemoTransactionSender(walletManager) } else { walletManager as TransactionSender diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt index 1727c81944..8936c779d1 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt @@ -4,7 +4,11 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics import com.tangem.blockchain.blockchains.binance.BinanceTransactionExtras import com.tangem.blockchain.blockchains.stellar.StellarTransactionExtras import com.tangem.blockchain.blockchains.xrp.XrpTransactionBuilder -import com.tangem.blockchain.common.* +import com.tangem.blockchain.common.Amount +import com.tangem.blockchain.common.BlockchainSdkError +import com.tangem.blockchain.common.TransactionError +import com.tangem.blockchain.common.TransactionSender +import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.extensions.SimpleResult import com.tangem.common.card.Card import com.tangem.common.core.TangemSdkError @@ -15,7 +19,11 @@ import com.tangem.tap.DELAY_SDK_DIALOG_CLOSE import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.analytics.AnalyticsEvent import com.tangem.tap.common.analytics.AnalyticsParam -import com.tangem.tap.common.extensions.* +import com.tangem.tap.common.extensions.dispatchDialogShow +import com.tangem.tap.common.extensions.dispatchErrorNotification +import com.tangem.tap.common.extensions.dispatchOnMain +import com.tangem.tap.common.extensions.safeUpdate +import com.tangem.tap.common.extensions.stripZeroPlainString import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction @@ -26,9 +34,15 @@ import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.extensions.minimalAmount import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.demo.DemoTransactionSender -import com.tangem.tap.features.demo.isDemoWallet -import com.tangem.tap.features.send.redux.* +import com.tangem.tap.features.demo.isDemoCard +import com.tangem.tap.features.send.redux.AddressPayIdActionUi +import com.tangem.tap.features.send.redux.AddressPayIdVerifyAction +import com.tangem.tap.features.send.redux.AmountAction +import com.tangem.tap.features.send.redux.AmountActionUi import com.tangem.tap.features.send.redux.FeeAction.RequestFee +import com.tangem.tap.features.send.redux.PrepareSendScreen +import com.tangem.tap.features.send.redux.SendAction +import com.tangem.tap.features.send.redux.SendActionUi import com.tangem.tap.features.send.redux.states.ButtonState import com.tangem.tap.features.send.redux.states.ExternalTransactionData import com.tangem.tap.features.send.redux.states.MainCurrencyType @@ -38,6 +52,7 @@ import com.tangem.tap.scope import com.tangem.tap.store import com.tangem.tap.tangemSdk import com.tangem.wallet.R +import java.util.EnumSet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -45,7 +60,6 @@ import kotlinx.coroutines.withContext import org.rekotlin.Action import org.rekotlin.Middleware import timber.log.Timber -import java.util.* /** [REDACTED_AUTHOR] @@ -171,7 +185,7 @@ private fun sendTransaction( ) } val sendResult = try { - if (walletManager.isDemoWallet()) { + if (card.isDemoCard()) { DemoTransactionSender(walletManager).send(txData, signer) } else { (walletManager as TransactionSender).send(txData, signer) @@ -340,5 +354,4 @@ private fun updateWarnings(dispatch: (Action) -> Unit) { val warnings = warningsManager.getWarnings(WarningMessage.Location.SendScreen, listOf(blockchain)) dispatch(SendAction.Warnings.Set(warnings)) -} - +} \ No newline at end of file