diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt index 0f9e21543f..fe375b57d6 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt @@ -6,9 +6,11 @@ import arrow.core.left import arrow.core.right import com.squareup.moshi.Moshi import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.extensions.hexToInt import com.tangem.blockchainsdk.utils.ExcludedBlockchains import com.tangem.data.walletconnect.model.CAIP2 import com.tangem.data.walletconnect.model.NamespaceKey +import com.tangem.data.walletconnect.network.ethereum.WcEthNetwork.NamespaceConverter.Companion.ETH_NAMESPACE_KEY import com.tangem.data.walletconnect.request.WcRequestToUseCaseConverter import com.tangem.data.walletconnect.request.WcRequestToUseCaseConverter.Companion.fromJson import com.tangem.data.walletconnect.sign.WcMethodUseCaseContext @@ -113,8 +115,10 @@ internal class WcEthNetwork( .getOrElse { return it.left() } ?.firstOrNull() ?.let { + val caip2 = CAIP2.fromRaw("$ETH_NAMESPACE_KEY:${it.chainId.hexToInt()}") + ?: return null.right() val newNetwork = networksConverter - .mainOrAnyWalletNetworkForRequest(it.chainId, wallet) + .mainOrAnyWalletNetworkForRequest(caip2.raw, wallet) ?: return null.right() WcEthMethod.AddEthereumChain(rawChain = it, network = newNetwork).right() } @@ -147,13 +151,17 @@ internal class WcEthNetwork( override val excludedBlockchains: ExcludedBlockchains, ) : WcNamespaceConverter { - override val namespaceKey: NamespaceKey = NamespaceKey("eip155") + override val namespaceKey: NamespaceKey = NamespaceKey(ETH_NAMESPACE_KEY) override fun toBlockchain(chainId: CAIP2): Blockchain? { if (chainId.namespace != namespaceKey.key) return null val ethChainId = chainId.reference.toIntOrNull() ?: return null return Blockchain.fromChainId(ethChainId) } + + companion object { + const val ETH_NAMESPACE_KEY = "eip155" + } } internal class Factories @Inject constructor( diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthAddChain.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthAddChain.kt index 9daf8154a1..33633558c4 100644 --- a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthAddChain.kt +++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthAddChain.kt @@ -5,6 +5,11 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) data class WcEthAddChain( + /** + * chainId are identified by EIP-155 integers expressed in hexadecimal notation, + * with 0x prefix and no leading zeroes for the chainId value. + * For more information https://eips.ethereum.org/EIPS/eip-5792#atomicbatch-capability + */ @Json(name = "chainId") val chainId: String, ) \ No newline at end of file diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt index 24a4878ec4..afb348e77e 100644 --- a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt +++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt @@ -15,7 +15,7 @@ sealed interface WcEthMethod : WcMethod { val account: String, val dataForSign: String, ) : WcEthMethod { - val humanMsg: String = params.message.contents.orEmpty() + val humanMsg: String = params.message?.contents.orEmpty() } data class SendTransaction( diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthSignTypedDataParams.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthSignTypedDataParams.kt index 0054a9c68c..b14e6af6df 100644 --- a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthSignTypedDataParams.kt +++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthSignTypedDataParams.kt @@ -6,24 +6,24 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) data class WcEthSignTypedDataParams( @Json(name = "domain") - val domain: Domain, + val domain: Domain?, @Json(name = "message") - val message: Message, + val message: Message?, @Json(name = "primaryType") - val primaryType: String, + val primaryType: String?, @Json(name = "types") val types: Map>, ) { @JsonClass(generateAdapter = true) data class Domain( @Json(name = "chainId") - val chainId: Int, + val chainId: Int?, @Json(name = "name") - val name: String, + val name: String?, @Json(name = "verifyingContract") - val verifyingContract: String, + val verifyingContract: String?, @Json(name = "version") - val version: String, + val version: String?, ) @JsonClass(generateAdapter = true)