diff --git a/app/libs/walletconnect-1.5.5.aar b/app/libs/walletconnect-1.5.5.aar deleted file mode 100644 index 4e2f1b4fb7..0000000000 Binary files a/app/libs/walletconnect-1.5.5.aar and /dev/null differ diff --git a/app/libs/walletconnect-1.5.6.aar b/app/libs/walletconnect-1.5.6.aar new file mode 100644 index 0000000000..30c576fb89 Binary files /dev/null and b/app/libs/walletconnect-1.5.6.aar differ diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt index bfd63f82d0..37e488ccf8 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt @@ -475,40 +475,6 @@ class WalletConnectManager { store.dispatchOnMain(WalletConnectAction.SwitchBlockchain(blockchain, session)) } } - client.onCustomRequest = { id: Long, data: String -> - Timber.d("Custom Request") - Timber.d(data) - val request = EthSignHelper.parseCustomRequest(data) - - when (request.method) { - WCMethodExtended.ETH_SIGN_TYPE_DATA_V4 -> handleTypedDataV4(request, client, id) - else -> { - Timber.d("WC: unrecognized custom request") - } - } - } - - } - - private fun handleTypedDataV4(request: CustomJsonRpcRequest, client: WCClient, id: Long) { - val message = EthSignHelper.tryToParseEthTypedMessage(request) - if (message != null) { - Timber.d("onEthSign_v4: $message") - // Analytics.logWcEvent( - // AnalyticsAnOld.WcAnalyticsEvent.Action( - // AnalyticsAnOld.WcAction.PersonalSign - // ) - // ) - sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> - store.dispatchOnMain( - WalletConnectAction.HandlePersonalSignRequest( - message, - sessionData, - id - ) - ) - } - } } companion object { 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 cb5fa5b527..def1cb4a92 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 @@ -39,6 +39,9 @@ import com.tangem.tap.store import com.tangem.tap.tangemSdk import com.tangem.tap.tangemSdkManager import com.trustwallet.walletconnect.models.ethereum.WCEthereumSignMessage +import com.trustwallet.walletconnect.models.ethereum.WCEthereumSignMessage.WCSignType.MESSAGE +import com.trustwallet.walletconnect.models.ethereum.WCEthereumSignMessage.WCSignType.PERSONAL_MESSAGE +import com.trustwallet.walletconnect.models.ethereum.WCEthereumSignMessage.WCSignType.TYPED_MESSAGE import com.trustwallet.walletconnect.models.ethereum.WCEthereumTransaction import timber.log.Timber import java.math.BigDecimal @@ -206,19 +209,15 @@ class WalletConnectSdkHelper { session: WalletConnectSession, id: Long, ): WcPersonalSignData { - val messageData = - try { - message.data.removePrefix(HEX_PREFIX).hexToBytes() - } catch (exception: Exception) { - message.data.asciiToHex()!!.hexToBytes() - } + val messageData = when (message.type) { + MESSAGE, PERSONAL_MESSAGE -> createMessageData(message) + TYPED_MESSAGE -> EthereumUtils.makeTypedDataHash(message.data) + } + val messageString = message.data.hexToAscii() ?: EthSignHelper.tryToParseEthTypedMessageString(message.data) ?: message.data - val prefixData = (ETH_MESSAGE_PREFIX + messageData.size.toString()).toByteArray() - val hashToSign = (prefixData + messageData).toKeccak() - val dialogData = PersonalSignDialogData( dAppName = session.peerMeta.name, message = messageString, @@ -226,13 +225,24 @@ class WalletConnectSdkHelper { id = id, ) return WcPersonalSignData( - hash = hashToSign, + hash = messageData, session = session, id = id, dialogData = dialogData, ) } + private fun createMessageData(message: WCEthereumSignMessage): ByteArray { + val messageData = try { + message.data.removePrefix(HEX_PREFIX).hexToBytes() + } catch (exception: Exception) { + message.data.asciiToHex()?.hexToBytes() ?: byteArrayOf() + } + + val prefixData = (ETH_MESSAGE_PREFIX + messageData.size.toString()).toByteArray() + return (prefixData + messageData).toKeccak() + } + private fun String.hexToAscii(): String? { return try { removePrefix(HEX_PREFIX).hexToBytes()