Updated on 2026-08-14

This commit is contained in:
Tangem 2025-05-23 13:43:55 +04:00
parent 9e932a5bee
commit a667fcc955
10 changed files with 178 additions and 27 deletions

View file

@ -67,6 +67,7 @@ internal object BlockAidMapper {
return when {
from.assetsDiffs.isEmpty() && from.exposures.isNotEmpty() -> mapApproveTransaction(from.exposures)
from.assetsDiffs.isNotEmpty() && from.exposures.isEmpty() -> mapSendReceiveTransaction(from.assetsDiffs)
!from.traces.isNullOrEmpty() -> mapNftSendReceiveTransaction(from.traces)
else -> SimulationResult.FailedToSimulate
}
}
@ -107,13 +108,13 @@ internal object BlockAidMapper {
symbol = diff.asset.symbol,
)
diff.outTransfer.orEmpty().forEach { transfer ->
transfer.value.toBigDecimalOrNull()?.let { amount ->
sendInfo.add(AmountInfo(amount = amount, token = token))
transfer.value?.toBigDecimalOrNull()?.let { amount ->
sendInfo.add(AmountInfo.FungibleTokens(amount = amount, token = token))
}
}
diff.inTransfer.orEmpty().forEach { transfer ->
transfer.value.toBigDecimalOrNull()?.let { amount ->
receiveInfo.add(AmountInfo(amount = amount, token = token))
transfer.value?.toBigDecimalOrNull()?.let { amount ->
receiveInfo.add(AmountInfo.FungibleTokens(amount = amount, token = token))
}
}
}
@ -124,4 +125,16 @@ internal object BlockAidMapper {
SimulationResult.FailedToSimulate
}
}
private fun mapNftSendReceiveTransaction(traces: List<Trace>?): SimulationResult {
val sendInfo = traces?.map {
AmountInfo.NonFungibleTokens(name = "${it.asset.name} #${it.exposed.tokenId}", logoUrl = it.exposed.logoUrl)
}
return if (!sendInfo.isNullOrEmpty()) {
SimulationResult.Success(SimulationData.SendAndReceive(send = sendInfo, receive = listOf()))
} else {
SimulationResult.FailedToSimulate
}
}
}

View file

@ -3,6 +3,7 @@ package com.tangem.data.blockaid
import com.domain.blockaid.models.dapp.CheckDAppResult
import com.domain.blockaid.models.transaction.SimulationResult
import com.domain.blockaid.models.transaction.ValidationResult
import com.domain.blockaid.models.transaction.simultation.AmountInfo
import com.domain.blockaid.models.transaction.simultation.SimulationData
import com.google.common.truth.Truth
import com.tangem.datasource.api.common.blockaid.models.response.*
@ -48,7 +49,11 @@ class BlockAidMapperTest {
validation = ValidationResponse(status = "Success", resultType = "Benign"),
simulation = SimulationResponse(
status = "Success",
accountSummary = AccountSummaryResponse(assetsDiffs = emptyList(), exposures = listOf(exposure)),
accountSummary = AccountSummaryResponse(
assetsDiffs = emptyList(),
exposures = listOf(exposure),
traces = null,
),
),
)
@ -77,7 +82,11 @@ class BlockAidMapperTest {
validation = ValidationResponse(status = "Success", resultType = "Benign"),
simulation = SimulationResponse(
status = "Success",
accountSummary = AccountSummaryResponse(exposures = emptyList(), assetsDiffs = listOf(assetDiff)),
accountSummary = AccountSummaryResponse(
exposures = emptyList(),
assetsDiffs = listOf(assetDiff),
traces = null,
),
),
)
@ -89,8 +98,8 @@ class BlockAidMapperTest {
val data = simulation?.data as? SimulationData.SendAndReceive
Truth.assertThat(data).isNotNull()
Truth.assertThat(data?.send?.first()?.amount).isEqualTo(BigDecimal("1.5"))
Truth.assertThat(data?.receive?.first()?.amount).isEqualTo(BigDecimal("2.0"))
Truth.assertThat((data?.send?.first() as? AmountInfo.FungibleTokens)?.amount).isEqualTo(BigDecimal("1.5"))
Truth.assertThat((data?.receive?.first() as? AmountInfo.FungibleTokens)?.amount).isEqualTo(BigDecimal("2.0"))
}
@Test
@ -99,7 +108,7 @@ class BlockAidMapperTest {
validation = ValidationResponse(status = "Error", resultType = "Benign"),
simulation = SimulationResponse(
status = "Success",
accountSummary = AccountSummaryResponse(emptyList(), emptyList()),
accountSummary = AccountSummaryResponse(emptyList(), emptyList(), null),
),
)
@ -114,7 +123,7 @@ class BlockAidMapperTest {
validation = ValidationResponse(status = "Success", resultType = "Phishing"),
simulation = SimulationResponse(
status = "Success",
accountSummary = AccountSummaryResponse(emptyList(), emptyList()),
accountSummary = AccountSummaryResponse(emptyList(), emptyList(), null),
),
)
@ -128,7 +137,7 @@ class BlockAidMapperTest {
validation = ValidationResponse(status = "Success", resultType = "Benign"),
simulation = SimulationResponse(
status = "Error",
accountSummary = AccountSummaryResponse(emptyList(), emptyList()),
accountSummary = AccountSummaryResponse(emptyList(), emptyList(), null),
),
)
@ -145,6 +154,7 @@ class BlockAidMapperTest {
accountSummary = AccountSummaryResponse(
assetsDiffs = emptyList(),
exposures = emptyList(),
traces = null,
),
),
)