diff --git a/.claude/docs/module-connectivity.html b/.claude/docs/module-connectivity.html
index 93fa5f4f39..19ee064092 100644
--- a/.claude/docs/module-connectivity.html
+++ b/.claude/docs/module-connectivity.html
@@ -227,8 +227,8 @@
").leftOrNull())
diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/common/visa/VisaUtilities.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/common/visa/VisaUtilities.kt
index ef0f7ffdf6..6b0800e209 100644
--- a/domain/card/src/main/kotlin/com/tangem/domain/card/common/visa/VisaUtilities.kt
+++ b/domain/card/src/main/kotlin/com/tangem/domain/card/common/visa/VisaUtilities.kt
@@ -22,6 +22,7 @@ object VisaUtilities {
val visaDefaultDerivationPath
get() = visaBlockchain.derivationPath(DerivationStyle.V3)
val customDerivationPath = DerivationPath("m/44'/60'/999999'/0/0")
+ val virtualAccountDerivationPath = DerivationPath("m/44'/60'/999998'/0/0")
val curve = EllipticCurve.Secp256k1
fun signWithNonceMessage(nonce: String): String {
diff --git a/domain/express/models/src/main/java/com/tangem/domain/express/models/ExchangeTransaction.kt b/domain/express/models/src/main/java/com/tangem/domain/express/models/ExchangeTransaction.kt
index 616c94d1bd..c6b58b5cab 100644
--- a/domain/express/models/src/main/java/com/tangem/domain/express/models/ExchangeTransaction.kt
+++ b/domain/express/models/src/main/java/com/tangem/domain/express/models/ExchangeTransaction.kt
@@ -13,6 +13,8 @@ package com.tangem.domain.express.models
* @property payoutHash On-chain hash of the payout (to-side) leg, if known.
* @property fromAsset The asset sent.
* @property toAsset The asset received.
+ * @property externalTxUrl The provider's page for this deal (tracking / refund / KYC); `null` when the provider
+ * supplies none (CEX only).
*/
data class ExchangeTransaction(
val txId: String,
@@ -23,4 +25,5 @@ data class ExchangeTransaction(
val payoutHash: String?,
val fromAsset: ExpressTransactionAsset,
val toAsset: ExpressTransactionAsset,
+ val externalTxUrl: String? = null,
)
\ No newline at end of file
diff --git a/domain/express/models/src/main/java/com/tangem/domain/express/models/OnrampTransaction.kt b/domain/express/models/src/main/java/com/tangem/domain/express/models/OnrampTransaction.kt
index e6388dee75..8319cb266d 100644
--- a/domain/express/models/src/main/java/com/tangem/domain/express/models/OnrampTransaction.kt
+++ b/domain/express/models/src/main/java/com/tangem/domain/express/models/OnrampTransaction.kt
@@ -17,6 +17,8 @@ import com.tangem.domain.tokens.model.AmountType
* @property fromFiat The fiat paid.
* @property toAsset The crypto asset received.
* @property country The country the onramp was made from; `null` if not resolved.
+ * @property externalTxUrl The provider's page for this deal (tracking / refund / KYC); `null` when the provider
+ * supplies none (not provided by all providers).
*/
data class OnrampTransaction(
val txId: String,
@@ -28,4 +30,5 @@ data class OnrampTransaction(
val fromFiat: Amount,
val toAsset: ExpressTransactionAsset,
val country: OnrampCountry? = null,
+ val externalTxUrl: String? = null,
)
\ No newline at end of file
diff --git a/domain/legacy/src/main/assets/contract_methods.json b/domain/legacy/src/main/assets/contract_methods.json
index 626e7657e1..fa8f6fe75c 100644
--- a/domain/legacy/src/main/assets/contract_methods.json
+++ b/domain/legacy/src/main/assets/contract_methods.json
@@ -251,5 +251,15 @@
"info": "GaslessTransactions",
"source": "https://github.com/tangem-developments/tangem-gasless-service",
"name": "gaslessTransaction"
+ },
+ "0x4b072692": {
+ "info": "GaslessTransactions",
+ "source": "https://github.com/tangem-developments/tangem-gasless-service",
+ "name": "gaslessTransaction"
+ },
+ "0xf9b181bf": {
+ "info": "GaslessTransactions",
+ "source": "https://github.com/tangem-developments/tangem-gasless-service",
+ "name": "gaslessTransaction"
}
}
diff --git a/domain/legacy/src/test/java/com/tangem/domain/ContractMethodsAssetTest.kt b/domain/legacy/src/test/java/com/tangem/domain/ContractMethodsAssetTest.kt
new file mode 100644
index 0000000000..af9319dca6
--- /dev/null
+++ b/domain/legacy/src/test/java/com/tangem/domain/ContractMethodsAssetTest.kt
@@ -0,0 +1,36 @@
+package com.tangem.domain
+
+import com.google.common.truth.Truth.assertThat
+import com.squareup.moshi.Moshi
+import com.squareup.moshi.Types
+import org.junit.jupiter.params.ParameterizedTest
+import org.junit.jupiter.params.provider.ValueSource
+import java.io.File
+
+/**
+ * Guards the `contract_methods.json` asset consumed by `SdkTransactionTypeConverter` (via
+ * `DefaultWalletManagersFacade.readSmartContractMethods`). History marking of gasless fee transfers
+ * relies on every gasless entry-point selector being mapped to the `gaslessTransaction` method name.
+ */
+internal class ContractMethodsAssetTest {
+
+ private val methods: Map> by lazy {
+ val json = File("src/main/assets/contract_methods.json").readText()
+ val type = Types.newParameterizedType(
+ Map::class.java,
+ String::class.java,
+ Types.newParameterizedType(Map::class.java, String::class.java, String::class.java),
+ )
+ requireNotNull(Moshi.Builder().build().adapter