Updated on 2026-08-14

This commit is contained in:
Tangem 2026-04-09 18:57:53 +04:00
parent b58be5612e
commit 8966e28e29
55 changed files with 572 additions and 192 deletions

View file

@ -1,7 +1,7 @@
package com.tangem.data.transaction
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.Token
import com.tangem.blockchainsdk.utils.toBlockchain
import com.tangem.data.common.currency.ResponseCryptoCurrenciesFactory
import com.tangem.data.transaction.convertes.GaslessSignedTransactionResultConverter
import com.tangem.data.transaction.convertes.GaslessTransactionRequestBuilder
@ -45,7 +45,7 @@ class DefaultGaslessTransactionRepository(
val supportedTokensData = gaslessTxServiceApi.getSupportedTokens().getOrThrow()
if (supportedTokensData.isSuccess) {
val networkBlockchain = Blockchain.fromId(network.rawId)
val networkBlockchain = network.toBlockchain()
val supportedTokens = supportedTokensData.result.tokens
.filter {
it.chainId == networkBlockchain.getChainId()
@ -100,7 +100,7 @@ class DefaultGaslessTransactionRepository(
network: Network,
eip7702Auth: Eip7702Authorization?,
): GaslessSignedTransactionResult = withContext(coroutineDispatcherProvider.io) {
val blockchain = Blockchain.fromId(network.rawId)
val blockchain = network.toBlockchain()
val transactionRequest = gaslessTransactionRequestBuilder.build(
gaslessTransaction = gaslessTransactionData,
signature = signature,
@ -124,7 +124,7 @@ class DefaultGaslessTransactionRepository(
}
override fun getChainIdForNetwork(network: Network): Int {
val networkBlockchain = Blockchain.fromId(network.rawId)
val networkBlockchain = network.toBlockchain()
return networkBlockchain.getChainId() ?: error("ChainId not found for blockchain ${networkBlockchain.name}")
}

View file

@ -2,6 +2,7 @@ package com.tangem.data.transaction
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.Token
import com.tangem.blockchainsdk.utils.toBlockchain
import com.tangem.data.common.currency.ResponseCryptoCurrenciesFactory
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.network.Network
@ -30,7 +31,7 @@ class MockedGaslessTransactionRepository(
}
override fun getChainIdForNetwork(network: Network): Int {
val networkBlockchain = Blockchain.fromId(network.rawId)
val networkBlockchain = network.toBlockchain()
return networkBlockchain.getChainId() ?: error("ChainId not found for blockchain ${networkBlockchain.name}")
}

View file

@ -171,7 +171,11 @@ class DefaultAllowanceRepositoryTest {
@Test
fun `returns NotEnough when partial allowance for non-tether token`() = runTest {
val token = buildToken(rawNetworkId = "ethereum", rawCurrencyId = "usd-coin")
val token = buildToken(
rawNetworkId = "ethereum",
rawCurrencyId = "usd-coin",
contractAddress = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
)
coEvery {
(approverWalletManager as Approver).getAllowance(spenderAddress, any())
@ -187,7 +191,7 @@ class DefaultAllowanceRepositoryTest {
@Test
fun `returns NotEnough when partial allowance for tether on non-ethereum network`() = runTest {
val token = buildToken(rawNetworkId = "polygon", rawCurrencyId = "tether")
val token = buildToken(rawNetworkId = "polygon-pos", rawCurrencyId = "tether")
coEvery {
(approverWalletManager as Approver).getAllowance(spenderAddress, any())
@ -200,7 +204,7 @@ class DefaultAllowanceRepositoryTest {
@Test
fun `returns ResetNeeded when partial allowance for tether on ethereum`() = runTest {
val token = buildToken(rawNetworkId = "ETH", rawCurrencyId = "tether")
val token = buildToken(rawNetworkId = "ethereum", rawCurrencyId = "tether")
coEvery {
(approverWalletManager as Approver).getAllowance(spenderAddress, any())
@ -216,7 +220,7 @@ class DefaultAllowanceRepositoryTest {
@Test
fun `returns ResetNeeded when partial allowance for tether on ethereum testnet`() = runTest {
val token = buildToken(rawNetworkId = "ETH/test", rawCurrencyId = "tether")
val token = buildToken(rawNetworkId = "ethereum/test", rawCurrencyId = "tether")
coEvery {
(approverWalletManager as Approver).getAllowance(spenderAddress, any())
@ -248,8 +252,7 @@ class DefaultAllowanceRepositoryTest {
private fun buildNetwork(rawNetworkId: String): Network {
val derivationPath = Network.DerivationPath.None
return Network(
id = Network.ID(Network.RawID(rawNetworkId), derivationPath),
backendId = rawNetworkId,
id = Network.ID(value = rawNetworkId, derivationPath = derivationPath),
name = rawNetworkId.replaceFirstChar { it.uppercase() },
currencySymbol = "ETH",
derivationPath = derivationPath,
@ -263,7 +266,7 @@ class DefaultAllowanceRepositoryTest {
}
private fun buildToken(
rawNetworkId: String = "ETH",
rawNetworkId: String = "ethereum",
rawCurrencyId: String = "tether",
contractAddress: String = "0xdAC17F958D2ee523a2206206994597C13D831ec7",
): CryptoCurrency.Token {