From 43f27a2f3370efb89c1721a0b493733d1431e3bf Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 18 Mar 2026 18:16:55 +0100 Subject: [PATCH 1/6] Updated on 2026-08-14 --- .../tap/di/domain/MarketsDomainModule.kt | 13 ---- .../local/preferences/PreferencesKeys.kt | 4 -- .../markets/DefaultMarketsTokenRepository.kt | 22 ------- .../converters/TokenListConfigConverters.kt | 2 - .../data/promo/DefaultPromoRepository.kt | 14 ---- .../domain/markets/TokenMarketListConfig.kt | 2 +- .../ShouldShowYieldModeMarketPromoUseCase.kt | 24 ------- .../repositories/MarketsTokenRepository.kt | 3 - .../tangem/domain/promo/PromoRepository.kt | 4 -- .../feed/model/feed/FeedComponentModel.kt | 4 -- .../feed/state/FeedMarketsBatchFlowManager.kt | 2 - .../model/market/list/MarketsListModel.kt | 65 +------------------ .../analytics/MarketsListAnalyticsEvent.kt | 2 - .../model/market/list/state/MarketsListUM.kt | 3 - .../list/state/MarketsNotificationUM.kt | 22 ------- .../MarketsListBatchFlowManager.kt | 6 +- .../statemanager/MarketsListUMStateManager.kt | 13 +--- .../preview/FeedListPreviewDataProvider.kt | 4 +- .../feed/ui/market/list/MarketsList.kt | 44 +------------ .../analytics/MarketsListAnalyticsEvent.kt | 2 - .../tokenlist/impl/model/MarketsListModel.kt | 48 ++------------ .../impl/model/MarketsNotificationUM.kt | 22 ------- .../MarketsListBatchFlowManager.kt | 2 - .../statemanager/MarketsListUMStateManager.kt | 14 +--- .../markets/tokenlist/impl/ui/MarketsList.kt | 46 +------------ .../tokenlist/impl/ui/state/MarketsListUM.kt | 4 -- 26 files changed, 21 insertions(+), 370 deletions(-) delete mode 100644 domain/markets/src/main/java/com/tangem/domain/markets/ShouldShowYieldModeMarketPromoUseCase.kt delete mode 100644 features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/state/MarketsNotificationUM.kt delete mode 100644 features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsNotificationUM.kt diff --git a/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt index 3be28c02e2..64d1c68c6c 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt @@ -4,7 +4,6 @@ import com.tangem.blockchainsdk.utils.ExcludedBlockchains import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.markets.* import com.tangem.domain.markets.repositories.MarketsTokenRepository -import com.tangem.domain.promo.PromoRepository import com.tangem.domain.quotes.single.SingleQuoteStatusSupplier import dagger.Module import dagger.Provides @@ -83,16 +82,4 @@ object MarketsDomainModule { fun provideGetTokenExchangesUseCase(marketsTokenRepository: MarketsTokenRepository): GetTokenExchangesUseCase { return GetTokenExchangesUseCase(marketsTokenRepository = marketsTokenRepository) } - - @Provides - @Singleton - fun provideShouldShowYieldModeMarketPromoUseCase( - promoRepository: PromoRepository, - marketsTokenRepository: MarketsTokenRepository, - ): ShouldShowYieldModeMarketPromoUseCase { - return ShouldShowYieldModeMarketPromoUseCase( - promoRepository = promoRepository, - marketsTokenRepository = marketsTokenRepository, - ) - } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt index c70f061ee1..6762fd15f3 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt @@ -79,10 +79,6 @@ object PreferencesKeys { val SHOULD_SHOW_MARKETS_TOOLTIP_KEY by lazy { booleanPreferencesKey(name = "shouldShowMarketsTooltip") } - val MARKETS_YIELD_SUPPLY_NOTIFICATION_HIDE_CLICKED_KEY by lazy { - booleanPreferencesKey(name = "marketsYieldSupplyNotificationHideClicked") - } - val WALLET_FIRST_USAGE_DATE_KEY by lazy { longPreferencesKey(name = "walletFirstUsageDate") } val IS_WALLET_NAMES_MIGRATION_DONE_KEY by lazy { booleanPreferencesKey(name = "isWalletNamesMigrationDone") } diff --git a/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt b/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt index 12d5b0f694..799793848c 100644 --- a/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt +++ b/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt @@ -19,7 +19,6 @@ import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.markets.TangemTechMarketsApi import com.tangem.datasource.api.markets.models.response.TokenMarketExchangesResponse import com.tangem.datasource.local.datastore.RuntimeStateStore -import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.common.wallets.getSyncStrict import com.tangem.domain.markets.* @@ -31,7 +30,6 @@ import com.tangem.pagination.* import com.tangem.pagination.fetcher.LimitOffsetBatchFetcher import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.withContext -import timber.log.Timber import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicLong @@ -294,26 +292,6 @@ internal class DefaultMarketsTokenRepository( } } - override suspend fun showYieldModePromo( - appCurrency: AppCurrency, - interval: TokenMarketListConfig.Interval, - ): Boolean = try { - val hasYieldSupplyTokens = marketsApi.getCoinsList( - currency = appCurrency.code, - interval = interval.toRequestParam(), - order = TokenMarketListConfig.Order.YieldSupply.toRequestParam(), - offset = 0, - limit = 40, - timestamp = null, - search = null, - ).getOrThrow().tokens.isNotEmpty() - - hasYieldSupplyTokens - } catch (error: Exception) { - Timber.e(error) - false - } - inline fun catchListErrorAndSendEvent(block: () -> T): T { return catchErrorAndSendEvent(block, ::createListErrorEvent) } diff --git a/data/markets/src/main/java/com/tangem/data/markets/converters/TokenListConfigConverters.kt b/data/markets/src/main/java/com/tangem/data/markets/converters/TokenListConfigConverters.kt index 7dce907fe8..1875a5b609 100644 --- a/data/markets/src/main/java/com/tangem/data/markets/converters/TokenListConfigConverters.kt +++ b/data/markets/src/main/java/com/tangem/data/markets/converters/TokenListConfigConverters.kt @@ -15,8 +15,6 @@ internal fun TokenMarketListConfig.Order.toRequestParam(): String = when (this) TokenMarketListConfig.Order.Buyers -> "buyers" TokenMarketListConfig.Order.TopGainers -> "gainers" TokenMarketListConfig.Order.TopLosers -> "losers" - TokenMarketListConfig.Order.Staking -> "staking" - TokenMarketListConfig.Order.YieldSupply -> "yield" } internal fun PriceChangeInterval.toRequestParam(): String = when (this) { diff --git a/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt b/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt index 625fdc2535..1a87137803 100644 --- a/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt +++ b/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt @@ -96,20 +96,6 @@ internal class DefaultPromoRepository( appPreferencesStore.store(PreferencesKeys.getShouldShowPromoKey(promoId = promoId.name), false) } - override fun isMarketsYieldSupplyNotificationHideClicked(): Flow { - return appPreferencesStore.get( - key = PreferencesKeys.MARKETS_YIELD_SUPPLY_NOTIFICATION_HIDE_CLICKED_KEY, - default = false, - ) - } - - override suspend fun setMarketsYieldSupplyNotificationHideClicked() { - appPreferencesStore.store( - key = PreferencesKeys.MARKETS_YIELD_SUPPLY_NOTIFICATION_HIDE_CLICKED_KEY, - value = true, - ) - } - override suspend fun isMoonpayPromoActive(): Boolean { val banner = runCatching(dispatchers.io) { val response = promoBannerStore.getSyncOrNull(MOONPAY_NAME) ?: run { diff --git a/domain/markets/models/src/main/kotlin/com/tangem/domain/markets/TokenMarketListConfig.kt b/domain/markets/models/src/main/kotlin/com/tangem/domain/markets/TokenMarketListConfig.kt index c1a1d9631f..48b181a1c0 100644 --- a/domain/markets/models/src/main/kotlin/com/tangem/domain/markets/TokenMarketListConfig.kt +++ b/domain/markets/models/src/main/kotlin/com/tangem/domain/markets/TokenMarketListConfig.kt @@ -9,7 +9,7 @@ data class TokenMarketListConfig( ) { enum class Order { - ByRating, Trending, Buyers, TopGainers, TopLosers, Staking, YieldSupply, + ByRating, Trending, Buyers, TopGainers, TopLosers } enum class Interval { diff --git a/domain/markets/src/main/java/com/tangem/domain/markets/ShouldShowYieldModeMarketPromoUseCase.kt b/domain/markets/src/main/java/com/tangem/domain/markets/ShouldShowYieldModeMarketPromoUseCase.kt deleted file mode 100644 index 599e7cefc3..0000000000 --- a/domain/markets/src/main/java/com/tangem/domain/markets/ShouldShowYieldModeMarketPromoUseCase.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.tangem.domain.markets - -import com.tangem.domain.appcurrency.model.AppCurrency -import com.tangem.domain.markets.repositories.MarketsTokenRepository -import com.tangem.domain.promo.PromoRepository -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.map - -class ShouldShowYieldModeMarketPromoUseCase( - private val promoRepository: PromoRepository, - private val marketsTokenRepository: MarketsTokenRepository, -) { - - operator fun invoke(appCurrency: AppCurrency, interval: TokenMarketListConfig.Interval): Flow { - val hideClickedFlow = promoRepository.isMarketsYieldSupplyNotificationHideClicked() - - return hideClickedFlow.map { hideClicked -> - !hideClicked && marketsTokenRepository.showYieldModePromo( - appCurrency = appCurrency, - interval = interval, - ) - } - } -} \ No newline at end of file diff --git a/domain/markets/src/main/java/com/tangem/domain/markets/repositories/MarketsTokenRepository.kt b/domain/markets/src/main/java/com/tangem/domain/markets/repositories/MarketsTokenRepository.kt index 00a0e86540..acf2b29ff1 100644 --- a/domain/markets/src/main/java/com/tangem/domain/markets/repositories/MarketsTokenRepository.kt +++ b/domain/markets/src/main/java/com/tangem/domain/markets/repositories/MarketsTokenRepository.kt @@ -1,6 +1,5 @@ package com.tangem.domain.markets.repositories -import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.markets.* import com.tangem.domain.models.account.DerivationIndex import com.tangem.domain.models.currency.CryptoCurrency @@ -54,6 +53,4 @@ interface MarketsTokenRepository { * @param tokenId token id */ suspend fun getTokenExchanges(tokenId: CryptoCurrency.RawID): List - - suspend fun showYieldModePromo(appCurrency: AppCurrency, interval: TokenMarketListConfig.Interval): Boolean } \ No newline at end of file diff --git a/domain/promo/src/main/java/com/tangem/domain/promo/PromoRepository.kt b/domain/promo/src/main/java/com/tangem/domain/promo/PromoRepository.kt index de65de82b0..40cb514115 100644 --- a/domain/promo/src/main/java/com/tangem/domain/promo/PromoRepository.kt +++ b/domain/promo/src/main/java/com/tangem/domain/promo/PromoRepository.kt @@ -16,10 +16,6 @@ interface PromoRepository { suspend fun setNeverToShowTokenPromo(promoId: PromoId) - fun isMarketsYieldSupplyNotificationHideClicked(): Flow - - suspend fun setMarketsYieldSupplyNotificationHideClicked() - suspend fun isMoonpayPromoActive(): Boolean // endregion diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/feed/FeedComponentModel.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/feed/FeedComponentModel.kt index bd7ea3d8c3..9fb42bb041 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/feed/FeedComponentModel.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/feed/FeedComponentModel.kt @@ -353,8 +353,6 @@ internal class FeedComponentModel @Inject constructor( SortByTypeUM.ExperiencedBuyers, SortByTypeUM.TopGainers, SortByTypeUM.TopLosers, - SortByTypeUM.Staking, - SortByTypeUM.YieldSupply, -> { analyticsEventHandler.send( FeedAnalyticsEvent.TokenListOpened( @@ -439,8 +437,6 @@ internal class FeedComponentModel @Inject constructor( SortByTypeUM.ExperiencedBuyers -> TokenMarketListConfig.Order.Buyers SortByTypeUM.TopGainers -> TokenMarketListConfig.Order.TopGainers SortByTypeUM.TopLosers -> TokenMarketListConfig.Order.TopLosers - SortByTypeUM.Staking -> TokenMarketListConfig.Order.Staking - SortByTypeUM.YieldSupply -> TokenMarketListConfig.Order.YieldSupply } } diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/feed/state/FeedMarketsBatchFlowManager.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/feed/state/FeedMarketsBatchFlowManager.kt index 4aa583ce84..056232c69b 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/feed/state/FeedMarketsBatchFlowManager.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/feed/state/FeedMarketsBatchFlowManager.kt @@ -341,8 +341,6 @@ internal class FeedMarketsBatchFlowManager( TokenMarketListConfig.Order.Buyers -> SortByTypeUM.ExperiencedBuyers TokenMarketListConfig.Order.TopGainers -> SortByTypeUM.TopGainers TokenMarketListConfig.Order.TopLosers -> SortByTypeUM.TopLosers - TokenMarketListConfig.Order.Staking -> SortByTypeUM.Staking - TokenMarketListConfig.Order.YieldSupply -> SortByTypeUM.YieldSupply } } } \ No newline at end of file diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/MarketsListModel.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/MarketsListModel.kt index 1692ec40b1..bf202960d8 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/MarketsListModel.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/MarketsListModel.kt @@ -1,7 +1,6 @@ package com.tangem.features.feed.model.market.list import androidx.compose.runtime.Stable -import arrow.core.Either import arrow.core.getOrElse import com.tangem.common.ui.markets.models.MarketsListItemUM import com.tangem.core.analytics.api.AnalyticsEventHandler @@ -12,20 +11,11 @@ import com.tangem.core.ui.components.bottomsheets.state.BottomSheetState import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.markets.GetMarketsTokenListFlowUseCase -import com.tangem.domain.markets.ShouldShowYieldModeMarketPromoUseCase -import com.tangem.domain.markets.TokenMarketListConfig import com.tangem.domain.markets.toSerializableParam import com.tangem.domain.models.currency.CryptoCurrency -import com.tangem.domain.promo.PromoRepository -import com.tangem.domain.settings.usercountry.GetUserCountryUseCase -import com.tangem.domain.settings.usercountry.models.UserCountry -import com.tangem.domain.settings.usercountry.models.UserCountryError -import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions import com.tangem.features.feed.components.market.list.DefaultMarketsTokenListComponent import com.tangem.features.feed.model.market.list.analytics.MarketsListAnalyticsEvent import com.tangem.features.feed.model.market.list.state.ListUM -import com.tangem.features.feed.model.market.list.state.MarketsListUM -import com.tangem.features.feed.model.market.list.state.MarketsNotificationUM import com.tangem.features.feed.model.market.list.state.SortByTypeUM import com.tangem.features.feed.model.market.list.statemanager.MarketsListBatchFlowManager import com.tangem.features.feed.model.market.list.statemanager.MarketsListUMStateManager @@ -49,11 +39,8 @@ internal class MarketsListModel @Inject constructor( override val dispatchers: CoroutineDispatcherProvider, getMarketsTokenListFlowUseCase: GetMarketsTokenListFlowUseCase, getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, - shouldShowYieldModeMarketPromoUseCase: ShouldShowYieldModeMarketPromoUseCase, paramsContainer: ParamsContainer, - private val promoRepository: PromoRepository, private val analyticsEventHandler: AnalyticsEventHandler, - private val getUserCountryUseCase: GetUserCountryUseCase, ) : Model() { private val updateQuotesJob = JobHolder() @@ -126,61 +113,30 @@ internal class MarketsListModel @Inject constructor( flow = searchMarketsListManager.uiItems, flow2 = searchMarketsListManager.isInInitialLoadingErrorState, flow3 = searchMarketsListManager.isSearchNotFoundState, - flow4 = shouldShowYieldModeMarketPromoUseCase( - appCurrency = currentAppCurrency.value, - interval = marketsListUMStateManager.selectedInterval.toBatchRequestInterval(), - ).conflate(), - flow5 = getUserCountryUseCase.invoke(), - ) { uiItems, isInInitialLoadingErrorState, isSearchNotFoundState, isYieldModePromo, userCountry -> + ) { uiItems, isInInitialLoadingErrorState, isSearchNotFoundState -> MarketsItemsData( items = uiItems, isInErrorState = isInInitialLoadingErrorState, isSearchNotFound = isSearchNotFoundState, - shouldShowYieldModePromo = isYieldModePromo, - userCountry = userCountry, ) } } else { combine( flow = mainMarketsListManager.uiItems, flow2 = mainMarketsListManager.isInInitialLoadingErrorState, - flow3 = shouldShowYieldModeMarketPromoUseCase( - appCurrency = currentAppCurrency.value, - interval = marketsListUMStateManager.selectedInterval.toBatchRequestInterval(), - ).conflate(), - flow4 = getUserCountryUseCase.invoke(), - ) { uiItems, isInInitialLoadingErrorState, shouldShowYieldModePromo, userCountry -> + ) { uiItems, isInInitialLoadingErrorState -> MarketsItemsData( items = uiItems, isInErrorState = isInInitialLoadingErrorState, isSearchNotFound = false, - shouldShowYieldModePromo = shouldShowYieldModePromo, - userCountry = userCountry, ) } } }.collect { marketsItemsData -> - val isApplyFCARestrictions = marketsItemsData.userCountry.getOrNull().needApplyFCARestrictions() - val shouldShowYieldModePromo = marketsItemsData.shouldShowYieldModePromo && !isApplyFCARestrictions - if (marketsListUMStateManager.state.value.marketsNotificationUM == null && shouldShowYieldModePromo) { - analyticsEventHandler.send(MarketsListAnalyticsEvent.YieldModePromoShown()) - } - marketsListUMStateManager.onUiItemsChanged( uiItems = marketsItemsData.items, isInErrorState = marketsItemsData.isInErrorState, isSearchNotFound = marketsItemsData.isSearchNotFound, - marketsNotificationUM = if (shouldShowYieldModePromo) { - MarketsNotificationUM.YieldSupplyPromo( - onClick = { - analyticsEventHandler.send(MarketsListAnalyticsEvent.YieldModeMoreInfoClicked()) - marketsListUMStateManager.selectedSortByType = SortByTypeUM.YieldSupply - }, - onCloseClick = { onYieldModeNotificationCloseClick() }, - ) - } else { - null - }, ) } } @@ -282,14 +238,6 @@ internal class MarketsListModel @Inject constructor( mainMarketsListManager.reload() } - private fun MarketsListUM.TrendInterval.toBatchRequestInterval(): TokenMarketListConfig.Interval { - return when (this) { - MarketsListUM.TrendInterval.H24 -> TokenMarketListConfig.Interval.H24 - MarketsListUM.TrendInterval.D7 -> TokenMarketListConfig.Interval.WEEK - MarketsListUM.TrendInterval.M1 -> TokenMarketListConfig.Interval.MONTH - } - } - private fun initAnalytics() { searchMarketsListManager .isSearchNotFoundState @@ -331,18 +279,9 @@ internal class MarketsListModel @Inject constructor( }.saveIn(updateQuotesJob) } - private fun onYieldModeNotificationCloseClick() { - analyticsEventHandler.send(MarketsListAnalyticsEvent.YieldModePromoClosed()) - modelScope.launch { - promoRepository.setMarketsYieldSupplyNotificationHideClicked() - } - } - private class MarketsItemsData( val items: ImmutableList, val isInErrorState: Boolean, val isSearchNotFound: Boolean, - val shouldShowYieldModePromo: Boolean, - val userCountry: Either, ) } \ No newline at end of file diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/analytics/MarketsListAnalyticsEvent.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/analytics/MarketsListAnalyticsEvent.kt index 2bd7212326..1ed310f5fe 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/analytics/MarketsListAnalyticsEvent.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/analytics/MarketsListAnalyticsEvent.kt @@ -23,8 +23,6 @@ internal sealed class MarketsListAnalyticsEvent( SortByTypeUM.ExperiencedBuyers -> "Buyers" SortByTypeUM.TopGainers -> "Gainers" SortByTypeUM.TopLosers -> "Losers" - SortByTypeUM.Staking -> "Staking" - SortByTypeUM.YieldSupply -> "Yield Supply" }, "Period" to when (interval) { MarketsListUM.TrendInterval.H24 -> "24h" diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/state/MarketsListUM.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/state/MarketsListUM.kt index 8415759005..c3b5d75360 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/state/MarketsListUM.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/state/MarketsListUM.kt @@ -19,7 +19,6 @@ internal data class MarketsListUM( val selectedInterval: TrendInterval, val onIntervalClick: (TrendInterval) -> Unit, val onSortByButtonClick: () -> Unit, - val marketsNotificationUM: MarketsNotificationUM?, val onSearchClicked: () -> Unit, ) { val isInSearchMode @@ -43,8 +42,6 @@ internal enum class SortByTypeUM(val text: TextReference) { ExperiencedBuyers(resourceReference(R.string.markets_sort_by_experienced_buyers_title)), TopGainers(resourceReference(R.string.markets_sort_by_top_gainers_title)), TopLosers(resourceReference(R.string.markets_sort_by_top_losers_title)), - Staking(resourceReference(R.string.common_staking)), - YieldSupply(resourceReference(R.string.markets_sort_by_yield_mode_title)), } @Immutable diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/state/MarketsNotificationUM.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/state/MarketsNotificationUM.kt deleted file mode 100644 index f51b1dd0fa..0000000000 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/state/MarketsNotificationUM.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.tangem.features.feed.model.market.list.state - -import com.tangem.core.ui.components.notifications.NotificationConfig -import com.tangem.core.ui.extensions.TextReference -import com.tangem.core.ui.extensions.resourceReference -import com.tangem.features.feed.impl.R - -internal sealed class MarketsNotificationUM(val config: NotificationConfig) { - - data class YieldSupplyPromo( - val onClick: () -> Unit, - val onCloseClick: () -> Unit, - ) : MarketsNotificationUM( - config = NotificationConfig( - iconResId = R.drawable.img_yield_supply_in_market_notification, - title = resourceReference(R.string.markets_yield_supply_banner_title), - subtitle = TextReference.EMPTY, - onClick = onClick, - onCloseClick = onCloseClick, - ), - ) -} \ No newline at end of file diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/statemanager/MarketsListBatchFlowManager.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/statemanager/MarketsListBatchFlowManager.kt index 779f8af9e3..b78cb4a6e8 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/statemanager/MarketsListBatchFlowManager.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/statemanager/MarketsListBatchFlowManager.kt @@ -24,8 +24,10 @@ import com.tangem.utils.coroutines.saveIn import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.* +import kotlinx.coroutines.launch private const val LOG_EVENTS = true @@ -305,8 +307,6 @@ internal class MarketsListBatchFlowManager( SortByTypeUM.ExperiencedBuyers -> TokenMarketListConfig.Order.Buyers SortByTypeUM.TopGainers -> TokenMarketListConfig.Order.TopGainers SortByTypeUM.TopLosers -> TokenMarketListConfig.Order.TopLosers - SortByTypeUM.Staking -> TokenMarketListConfig.Order.Staking - SortByTypeUM.YieldSupply -> TokenMarketListConfig.Order.YieldSupply } } diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/statemanager/MarketsListUMStateManager.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/statemanager/MarketsListUMStateManager.kt index e503e85087..48d95edb99 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/statemanager/MarketsListUMStateManager.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/list/statemanager/MarketsListUMStateManager.kt @@ -99,7 +99,6 @@ internal class MarketsListUMStateManager( isInErrorState: Boolean, isSearchNotFound: Boolean, uiItems: ImmutableList, - marketsNotificationUM: MarketsNotificationUM?, ) { state.update { marketsListUM -> when { @@ -115,19 +114,13 @@ internal class MarketsListUMStateManager( marketsListUM.copy(list = ListUM.Loading) } else -> { - marketsListUM.updateItems( - newItems = uiItems, - marketsNotificationUM = marketsNotificationUM, - ) + marketsListUM.updateItems(newItems = uiItems) } } } } - private fun MarketsListUM.updateItems( - newItems: ImmutableList, - marketsNotificationUM: MarketsNotificationUM?, - ): MarketsListUM { + private fun MarketsListUM.updateItems(newItems: ImmutableList): MarketsListUM { val currentState = this if (isInSearchMode.not() || currentState.showUnder100kButtonAlreadyPressed()) { @@ -139,7 +132,6 @@ internal class MarketsListUMStateManager( shouldShowUnder100kTokensNotificationWasHidden = currentState .showUnder100kButtonAlreadyPressed(), ), - marketsNotificationUM = marketsNotificationUM, ) } @@ -243,7 +235,6 @@ internal class MarketsListUMStateManager( onOptionClicked = ::onBottomSheetOptionClicked, ), ), - marketsNotificationUM = null, onSearchClicked = { analyticsEventHandler.send(FeedAnalyticsEvent.TokenSearchedClicked()) changeSearchBarIsActive(true) diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/feed/preview/FeedListPreviewDataProvider.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/feed/preview/FeedListPreviewDataProvider.kt index 59635e4fe6..7f775602b2 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/feed/preview/FeedListPreviewDataProvider.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/feed/preview/FeedListPreviewDataProvider.kt @@ -2,7 +2,6 @@ package com.tangem.features.feed.ui.feed.preview import com.tangem.common.ui.charts.state.MarketChartRawData import com.tangem.common.ui.markets.models.MarketsListItemUM -import com.tangem.features.feed.ui.feed.components.articles.ArticleConfigUM import com.tangem.core.ui.R import com.tangem.core.ui.components.currency.icon.CurrencyIconState import com.tangem.core.ui.components.label.entity.LabelLeadingContentUM @@ -15,6 +14,7 @@ import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.features.feed.model.market.list.state.SortByTypeUM import com.tangem.features.feed.ui.earn.state.EarnListItemUM import com.tangem.features.feed.ui.earn.state.EarnListUM +import com.tangem.features.feed.ui.feed.components.articles.ArticleConfigUM import com.tangem.features.feed.ui.feed.state.* import kotlinx.collections.immutable.* @@ -77,8 +77,6 @@ internal object FeedListPreviewDataProvider { items = items, isSelected = false, ), - SortByTypeUM.Staking to MarketChartUM.Loading, - SortByTypeUM.TopLosers to MarketChartUM.Loading, ) val ratingChart = if (includeErrorState) { diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/market/list/MarketsList.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/market/list/MarketsList.kt index 32e675caff..dc00b05e46 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/market/list/MarketsList.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/market/list/MarketsList.kt @@ -33,7 +33,9 @@ import com.tangem.core.ui.components.fields.TangemSearchBarDefaults import com.tangem.core.ui.components.fields.entity.SearchBarUM import com.tangem.core.ui.components.keyboardAsState import com.tangem.core.ui.event.consumedEvent -import com.tangem.core.ui.extensions.* +import com.tangem.core.ui.extensions.resolveReference +import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.res.LocalMainBottomSheetColor import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview @@ -42,12 +44,10 @@ import com.tangem.features.feed.impl.R import com.tangem.features.feed.model.market.list.state.* import com.tangem.features.feed.ui.market.list.components.MarketsListLazyColumn import com.tangem.features.feed.ui.market.list.components.MarketsListSortByBottomSheet -import com.tangem.features.feed.ui.market.list.components.YieldSupplyInMarketsPromoNotification import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay -private const val SHOW_MORE_KEY = "privacyPolicy" private const val DELAY_FOR_FOCUS_REQUEST = 500L @Composable @@ -152,40 +152,6 @@ private fun ColumnScope.Content(state: MarketsListUM, modifier: Modifier = Modif onSortByClick = state.onSortByButtonClick, ) } - - AnimatedVisibility( - state.list !is ListUM.LoadingError && state.isInSearchMode.not() && - state.selectedSortBy != SortByTypeUM.YieldSupply, - ) { - val wrappedNotification = remember(state.list) { state.marketsNotificationUM } - val showMore = stringResourceSafe(R.string.common_show_more) - - when (wrappedNotification) { - is MarketsNotificationUM.YieldSupplyPromo -> { - val description = stringResourceSafe( - R.string.markets_yield_supply_banner_description, - showMore, - ) - - val clickableDescription = annotatedReference { - append(description.substringBefore(showMore)) - - pushStringAnnotation(SHOW_MORE_KEY, "") - appendColored(showMore, TangemTheme.colors.text.accent) - pop() - } - - YieldSupplyInMarketsPromoNotification( - config = wrappedNotification.config.copy( - subtitle = clickableDescription, - ), - modifier = Modifier.padding(bottom = TangemTheme.dimens.spacing12), - ) - } - else -> { /* no-op */ - } - } - } } } val strokeWidth = TangemTheme.dimens.size0_5 @@ -376,10 +342,6 @@ private fun Preview() { onDismissRequest = {}, content = SortByBottomSheetContentUM(selectedOption = SortByTypeUM.Rating) {}, ), - marketsNotificationUM = MarketsNotificationUM.YieldSupplyPromo( - onClick = {}, - onCloseClick = {}, - ), onSearchClicked = {}, ), ) diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/analytics/MarketsListAnalyticsEvent.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/analytics/MarketsListAnalyticsEvent.kt index ee943d293b..d1799f7096 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/analytics/MarketsListAnalyticsEvent.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/analytics/MarketsListAnalyticsEvent.kt @@ -23,8 +23,6 @@ internal sealed class MarketsListAnalyticsEvent( SortByTypeUM.ExperiencedBuyers -> "Buyers" SortByTypeUM.TopGainers -> "Gainers" SortByTypeUM.TopLosers -> "Losers" - SortByTypeUM.Staking -> "Staking" - SortByTypeUM.YieldSupply -> "Yield Supply" }, "Period" to when (interval) { MarketsListUM.TrendInterval.H24 -> "24h" diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsListModel.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsListModel.kt index c898c68a73..6056103412 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsListModel.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsListModel.kt @@ -10,15 +10,12 @@ import com.tangem.core.ui.components.bottomsheets.state.BottomSheetState import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.markets.GetMarketsTokenListFlowUseCase -import com.tangem.domain.markets.ShouldShowYieldModeMarketPromoUseCase import com.tangem.domain.markets.TokenMarket import com.tangem.domain.markets.TokenMarketListConfig import com.tangem.domain.models.currency.CryptoCurrency -import com.tangem.domain.promo.PromoRepository import com.tangem.domain.settings.usercountry.GetUserCountryUseCase import com.tangem.domain.settings.usercountry.models.UserCountry import com.tangem.domain.settings.usercountry.models.UserCountryError -import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions import com.tangem.features.markets.tokenlist.impl.analytics.MarketsListAnalyticsEvent import com.tangem.features.markets.tokenlist.impl.model.statemanager.MarketsListBatchFlowManager import com.tangem.features.markets.tokenlist.impl.model.statemanager.MarketsListUMStateManager @@ -46,8 +43,6 @@ internal class MarketsListModel @Inject constructor( override val dispatchers: CoroutineDispatcherProvider, getMarketsTokenListFlowUseCase: GetMarketsTokenListFlowUseCase, getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, - shouldShowYieldModeMarketPromoUseCase: ShouldShowYieldModeMarketPromoUseCase, - private val promoRepository: PromoRepository, private val getUserCountryUseCase: GetUserCountryUseCase, private val analyticsEventHandler: AnalyticsEventHandler, ) : Model() { @@ -118,17 +113,12 @@ internal class MarketsListModel @Inject constructor( flow = searchMarketsListManager.uiItems, flow2 = searchMarketsListManager.isInInitialLoadingErrorState, flow3 = searchMarketsListManager.isSearchNotFoundState, - flow4 = shouldShowYieldModeMarketPromoUseCase( - appCurrency = currentAppCurrency.value, - interval = marketsListUMStateManager.selectedInterval.toBatchRequestInterval(), - ).conflate(), - flow5 = getUserCountryUseCase.invoke(), - ) { uiItems, isInInitialLoadingErrorState, isSearchNotFoundState, isYieldModePromo, userCountry -> + flow4 = getUserCountryUseCase.invoke(), + ) { uiItems, isInInitialLoadingErrorState, isSearchNotFoundState, userCountry -> MarketsItemsData( items = uiItems, isInErrorState = isInInitialLoadingErrorState, isSearchNotFound = isSearchNotFoundState, - shouldShowYieldModePromo = isYieldModePromo, userCountry = userCountry, ) } @@ -136,43 +126,21 @@ internal class MarketsListModel @Inject constructor( combine( flow = mainMarketsListManager.uiItems, flow2 = mainMarketsListManager.isInInitialLoadingErrorState, - flow3 = shouldShowYieldModeMarketPromoUseCase( - appCurrency = currentAppCurrency.value, - interval = marketsListUMStateManager.selectedInterval.toBatchRequestInterval(), - ).conflate(), - flow4 = getUserCountryUseCase.invoke(), - ) { uiItems, isInInitialLoadingErrorState, shouldShowYieldModePromo, userCountry -> + flow3 = getUserCountryUseCase.invoke(), + ) { uiItems, isInInitialLoadingErrorState, userCountry -> MarketsItemsData( items = uiItems, isInErrorState = isInInitialLoadingErrorState, isSearchNotFound = false, - shouldShowYieldModePromo = shouldShowYieldModePromo, userCountry = userCountry, ) } } }.collect { marketsItemsData -> - val isApplyFCARestrictions = marketsItemsData.userCountry.getOrNull().needApplyFCARestrictions() - val shouldShowYieldModePromo = marketsItemsData.shouldShowYieldModePromo && !isApplyFCARestrictions - if (marketsListUMStateManager.state.value.marketsNotificationUM == null && shouldShowYieldModePromo) { - analyticsEventHandler.send(MarketsListAnalyticsEvent.YieldModePromoShown()) - } - marketsListUMStateManager.onUiItemsChanged( uiItems = marketsItemsData.items, isInErrorState = marketsItemsData.isInErrorState, isSearchNotFound = marketsItemsData.isSearchNotFound, - marketsNotificationUM = if (shouldShowYieldModePromo) { - MarketsNotificationUM.YieldSupplyPromo( - onClick = { - analyticsEventHandler.send(MarketsListAnalyticsEvent.YieldModeMoreInfoClicked()) - marketsListUMStateManager.selectedSortByType = SortByTypeUM.YieldSupply - }, - onCloseClick = { onYieldModeNotificationCloseClick() }, - ) - } else { - null - }, ) } } @@ -327,18 +295,10 @@ internal class MarketsListModel @Inject constructor( }.saveIn(updateQuotesJob) } - private fun onYieldModeNotificationCloseClick() { - analyticsEventHandler.send(MarketsListAnalyticsEvent.YieldModePromoClosed()) - modelScope.launch { - promoRepository.setMarketsYieldSupplyNotificationHideClicked() - } - } - private class MarketsItemsData( val items: ImmutableList, val isInErrorState: Boolean, val isSearchNotFound: Boolean, - val shouldShowYieldModePromo: Boolean, val userCountry: Either, ) } \ No newline at end of file diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsNotificationUM.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsNotificationUM.kt deleted file mode 100644 index 5870289d78..0000000000 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsNotificationUM.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.tangem.features.markets.tokenlist.impl.model - -import com.tangem.core.ui.components.notifications.NotificationConfig -import com.tangem.core.ui.extensions.TextReference -import com.tangem.core.ui.extensions.resourceReference -import com.tangem.features.markets.impl.R - -internal sealed class MarketsNotificationUM(val config: NotificationConfig) { - - data class YieldSupplyPromo( - val onClick: () -> Unit, - val onCloseClick: () -> Unit, - ) : MarketsNotificationUM( - config = NotificationConfig( - iconResId = R.drawable.img_yield_supply_in_market_notification, - title = resourceReference(R.string.markets_yield_supply_banner_title), - subtitle = TextReference.EMPTY, - onClick = onClick, - onCloseClick = onCloseClick, - ), - ) -} \ No newline at end of file diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListBatchFlowManager.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListBatchFlowManager.kt index e96284ced9..077b00d818 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListBatchFlowManager.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListBatchFlowManager.kt @@ -347,8 +347,6 @@ internal class MarketsListBatchFlowManager( SortByTypeUM.ExperiencedBuyers -> TokenMarketListConfig.Order.Buyers SortByTypeUM.TopGainers -> TokenMarketListConfig.Order.TopGainers SortByTypeUM.TopLosers -> TokenMarketListConfig.Order.TopLosers - SortByTypeUM.Staking -> TokenMarketListConfig.Order.Staking - SortByTypeUM.YieldSupply -> TokenMarketListConfig.Order.YieldSupply } } diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListUMStateManager.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListUMStateManager.kt index 8c33b39d79..94b36029cd 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListUMStateManager.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListUMStateManager.kt @@ -8,7 +8,6 @@ import com.tangem.core.ui.event.triggeredEvent import com.tangem.core.ui.extensions.resourceReference import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.features.markets.impl.R -import com.tangem.features.markets.tokenlist.impl.model.MarketsNotificationUM import com.tangem.features.markets.tokenlist.impl.ui.state.* import com.tangem.utils.Provider import kotlinx.collections.immutable.ImmutableList @@ -94,7 +93,6 @@ internal class MarketsListUMStateManager( isInErrorState: Boolean, isSearchNotFound: Boolean, uiItems: ImmutableList, - marketsNotificationUM: MarketsNotificationUM?, ) { state.update { currentState -> when { @@ -110,19 +108,13 @@ internal class MarketsListUMStateManager( currentState.copy(list = ListUM.Loading) } else -> { - currentState.updateItems( - newItems = uiItems, - marketsNotificationUM = marketsNotificationUM, - ) + currentState.updateItems(newItems = uiItems) } } } } - private fun MarketsListUM.updateItems( - newItems: ImmutableList, - marketsNotificationUM: MarketsNotificationUM?, - ): MarketsListUM { + private fun MarketsListUM.updateItems(newItems: ImmutableList): MarketsListUM { val currentState = this if (isInSearchMode.not() || currentState.showUnder100kButtonAlreadyPressed()) { @@ -133,7 +125,6 @@ internal class MarketsListUMStateManager( .copy( wasUnder100kTokensNotificationHidden = currentState.showUnder100kButtonAlreadyPressed(), ), - marketsNotificationUM = marketsNotificationUM, ) } @@ -255,6 +246,5 @@ internal class MarketsListUMStateManager( onOptionClicked = ::onBottomSheetOptionClicked, ), ), - marketsNotificationUM = null, ) } \ No newline at end of file diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/ui/MarketsList.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/ui/MarketsList.kt index 79b42c8c55..7b77909a75 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/ui/MarketsList.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/ui/MarketsList.kt @@ -38,16 +38,16 @@ import com.tangem.core.ui.components.fields.SearchBar import com.tangem.core.ui.components.fields.entity.SearchBarUM import com.tangem.core.ui.components.keyboardAsState import com.tangem.core.ui.event.consumedEvent -import com.tangem.core.ui.extensions.* +import com.tangem.core.ui.extensions.resolveReference +import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.res.LocalMainBottomSheetColor import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.features.markets.impl.R -import com.tangem.features.markets.tokenlist.impl.model.MarketsNotificationUM import com.tangem.features.markets.tokenlist.impl.ui.components.MarketsListLazyColumn import com.tangem.features.markets.tokenlist.impl.ui.components.MarketsListSortByBottomSheet -import com.tangem.features.markets.tokenlist.impl.ui.components.YieldSupplyInMarketsPromoNotification import com.tangem.features.markets.tokenlist.impl.ui.preview.MarketChartListItemPreviewDataProvider import com.tangem.features.markets.tokenlist.impl.ui.state.ListUM import com.tangem.features.markets.tokenlist.impl.ui.state.MarketsListUM @@ -56,8 +56,6 @@ import com.tangem.features.markets.tokenlist.impl.ui.state.SortByTypeUM import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -private const val SHOW_MORE_KEY = "privacyPolicy" - @Composable internal fun MarketsList( state: MarketsListUM, @@ -175,40 +173,6 @@ private fun ColumnScope.Content(state: MarketsListUM, modifier: Modifier = Modif onSortByClick = state.onSortByButtonClick, ) } - - val marketsNotificationUM = state.marketsNotificationUM - AnimatedVisibility( - state.list !is ListUM.LoadingError && - state.isInSearchMode.not() && state.selectedSortBy != SortByTypeUM.YieldSupply, - ) { - val showMore = stringResourceSafe(R.string.common_show_more) - - when (marketsNotificationUM) { - is MarketsNotificationUM.YieldSupplyPromo -> { - val description = stringResourceSafe( - R.string.markets_yield_supply_banner_description, - showMore, - ) - - val clickableDescription = annotatedReference { - append(description.substringBefore(showMore)) - - pushStringAnnotation(SHOW_MORE_KEY, "") - appendColored(showMore, TangemTheme.colors.text.accent) - pop() - } - - YieldSupplyInMarketsPromoNotification( - config = marketsNotificationUM.config.copy( - subtitle = clickableDescription, - ), - modifier = Modifier.padding(bottom = TangemTheme.dimens.spacing12), - ) - } - else -> { /* no-op */ - } - } - } } } val strokeWidth = TangemTheme.dimens.size0_5 @@ -416,10 +380,6 @@ private fun Preview() { onDismissRequest = {}, content = SortByBottomSheetContentUM(selectedOption = SortByTypeUM.Rating) {}, ), - marketsNotificationUM = MarketsNotificationUM.YieldSupplyPromo( - onClick = {}, - onCloseClick = {}, - ), ), onHeaderSizeChange = {}, bottomSheetState = BottomSheetState.EXPANDED, diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/ui/state/MarketsListUM.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/ui/state/MarketsListUM.kt index d0ade846a6..4c269a8c2b 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/ui/state/MarketsListUM.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/ui/state/MarketsListUM.kt @@ -8,7 +8,6 @@ import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resourceReference import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.features.markets.impl.R -import com.tangem.features.markets.tokenlist.impl.model.MarketsNotificationUM import kotlinx.collections.immutable.ImmutableList internal data class MarketsListUM( @@ -19,7 +18,6 @@ internal data class MarketsListUM( val selectedInterval: TrendInterval, val onIntervalClick: (TrendInterval) -> Unit, val onSortByButtonClick: () -> Unit, - val marketsNotificationUM: MarketsNotificationUM?, ) { val isInSearchMode get() = searchBar.isActive @@ -37,8 +35,6 @@ enum class SortByTypeUM(val text: TextReference) { ExperiencedBuyers(resourceReference(R.string.markets_sort_by_experienced_buyers_title)), TopGainers(resourceReference(R.string.markets_sort_by_top_gainers_title)), TopLosers(resourceReference(R.string.markets_sort_by_top_losers_title)), - Staking(resourceReference(R.string.common_staking)), - YieldSupply(resourceReference(R.string.yield_module_earn_sheet_title)), } @Immutable From 913dc28c0c0d8c8488b6802a83e4c280932e33cb Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 18 Mar 2026 20:20:48 +0300 Subject: [PATCH 2/6] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 19 +- core/res/src/main/res/values-es/strings.xml | 1 + core/res/src/main/res/values-fr/strings.xml | 1 + core/res/src/main/res/values-ja/strings.xml | 20 + .../src/main/res/values-pt-rBR/strings.xml | 2197 +++++++++++++++++ core/res/src/main/res/values-ru/strings.xml | 14 +- .../src/main/res/values-uk-rUA/strings.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 19 + core/res/src/main/res/values/strings.xml | 41 +- 9 files changed, 2298 insertions(+), 15 deletions(-) create mode 100644 core/res/src/main/res/values-pt-rBR/strings.xml create mode 100644 core/res/src/main/res/values-zh-rCN/strings.xml diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 4cc165f633..de8a0facb8 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -217,6 +217,7 @@ Hinzufügen Zum Portfolio hinzufügen Token hinzufügen + Token hinzufügen Hinzugefügt Vertragsadresse Alle @@ -399,6 +400,7 @@ Staking beenden Aufgrund der Beschränkungen von %1$s können nur %2$d UTXOs in eine einzige Transaktion passen. Das bedeutet, dass du nur %3$s oder weniger senden kannst. Du musst den Betrag reduzieren. Wert kopiert + Meine Wallet Woche mit Ja @@ -469,9 +471,12 @@ Sende Geld nur mit Beste Gelegenheiten Filter löschen + Die Liste ist vorübergehend leer, da sie gerade aktualisiert wird. Schauen Sie in Kürze wieder rein. Alle Netzwerke Alle Arten Filtern nach + Meine Netzwerke + Netzwerke Meist verwendet Keine Ergebnisse Verdienen @@ -826,6 +831,7 @@ Volumen Rufe dies auf oder tippe auf die Suchleiste, um Token direkt vom Markt hinzuzufügen Token hinzufügen + Token hinzufügen Steiger die Leistung Deiner Assets und ermögliche Dir gleichzeitig den sofortigen Zugriff. %s Yield-Modus aktivieren Du musst auf die folgende Version aktualisieren: %1$s um eine mobile Wallet zu erstellen @@ -845,6 +851,7 @@ Verwandte Token Verwandte Nachrichten Auf dem Laufenden bleiben + Trend-Score NFC ist auf deinem Gerät nicht verfügbar Über NFT NFT-Vermögenswert @@ -963,12 +970,12 @@ Biometrische Daten Lese mehr über die Seed-Phrase - + . Schreibe diese %d-Wörter in der unten angegebenen Reihenfolge auf und bewahre sie an einem sicheren und geheimen Ort auf. Deine Seed-Phrase - + . %d Wörter Um deine Wallets zu importieren, gib bitte deine Seed-Phrase in das folgende Feld ein @@ -1101,9 +1108,9 @@ für %d Wallet für %d Wallets - Du bekommst ^^%1$s^^ für jede von einem Freund gekaufte Wallet auf deine %2$s Netzwerkadresse %3$s ^^30 Tage nach^^ dem - Du - Bekommt eine + Du erhältst ^^%1$s^^ für jede Wallet, die ein Freund kauft.\nDie Auszahlung erfolgt ^^30 Tage^^ nach dem Kauf an deine%2$s Adresse.%3$s + Du erhältst + Er erhält beim Kauf einer Wallet auf tangem.com %s Rabatt Dein Freund @@ -1222,6 +1229,7 @@ Begrenzung der Transaktionen Optional Bitte richte den QR-Code auf das Quadrat aus, um ihn zu scannen. Stell sicher, dass du die Netzwerkadresse %s scannen. + Ein variabler Zinssatz bedeutet, dass sich der endgültige Betrag, den Sie erhalten, je nach Marktbedingungen zwischen dem Beginn und dem Abschluss des Swaps geringfügig ändern kann. Jüngste Empfänger Keine gültige Adresse @@ -1431,6 +1439,7 @@ Das Netzwerk erhebt eine Token-Genehmigungsgebühr, um zu überprüfen, ob Sie die Verwendung Ihres Tokens für den Swap genehmigen. Tausche mehr Token zu besseren Kursen direkt in deiner Brieftasche. Neuer Swap-Anbieter verfügbar! + Suchen Sie etwas anderes?\n Versuchen Sie es mit der Suche oder erkunden Sie eine andere Kryptowährung! Suchen Sie nach einem beliebigen Token, auch wenn es noch nicht in Ihrer Liste ist. Nutzen Sie die Suche, um zu finden, was Sie benötigen. Vertraue auf den rund um die Uhr verfügbaren Support bei allen Problemen diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 0ec38e3506..4fde82b922 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -217,6 +217,7 @@ Agregar Añadir al portafolio Agregar token + Añada tokens Agregado Dirección Todos diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 41913d6515..89c9435c9b 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -217,6 +217,7 @@ Ajouter Ajouter au portfolio Ajouter un jeton + Ajouter des jetons Ajouté Adresse Tous diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 6b87995090..42b792db6e 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -214,6 +214,7 @@ 追加 ポートフォリオに追加 トークンを追加 + トークンの追加 追加済み アドレス すべて @@ -319,6 +320,7 @@ NFT いいえ アドレスがありません + 該当する結果はありません 未追加 利用できません 今はしない @@ -377,6 +379,7 @@ 宛先 %sへ 今日 + 送信するトークン %d トークン @@ -388,6 +391,7 @@ わかりました 理解して続行 エラーが発生しました。もう一度お試しください。 + ロック解除 アクセスできません ステーキング解除 %1$sの制限により、1つのトランザクションに収まるUTXOは%2$d個のみです。つまり、 %3$s以下しか送信できません。量を減らす必要があります。 @@ -692,6 +696,7 @@ Manaレベル 暗号資産および取引の追跡を開始するには、トークンを追加してください トークンの管理 + QRコードをスキャンして送金するか、アプリに接続します。 すべてのネットワークにアクセスするには、カードをスキャンする必要があります。 カードまたはリングをスキャンする 2月%2$s - %3$sの期間、Changelly経由のスワップは%1$sのサービス手数料となります。 @@ -728,6 +733,8 @@ Tangemで稼ぐ 選択したネットワークのアドレスを生成するには、Tangemウォレットカードまたはリングをスキャンする必要があります。 トークンを追加するには、これをスワイプするか、検索バーをタップしてください。 + 上にスワイプしてマーケットをチェック + 新たな有望銘柄を見つける このセクションのデータは、次のネットワークから取得されています: %s データを読み込めません… データなし @@ -788,6 +795,10 @@ ホルダー 特定の期間内のトークンホルダー数の変化 ホルダー + + + + インサイト リンク 流動性 @@ -815,9 +826,11 @@ 総供給量 特定の暗号資産に存在しうるコインまたはトークンの最大数 総供給量 + 24h 取引量(24時間) 過去24時間以内に取引された暗号資産の合計額。市場の活発さと流動性を示します。 取引量(24時間) + 合計 %s 取引量 これをドラッグするか、検索窓をタップして、マーケットから直接トークンを追加します トークンを追加 @@ -839,6 +852,7 @@ 関連トークン 関連ニュース 最新情報を入手 + トレンドスコア お使いのデバイスではNFCが使用できません NFTについて NFTアセット @@ -1181,6 +1195,9 @@ メモ: %s 無効なメモ ネットワーク手数料のカバー + + %dトークンは、このアドレスには対応していません。 + ナンス 各取引に固有の番号です。保留中の取引を再送信またはキャンセルするために使用します。 ナンスを入力してください... @@ -1488,6 +1505,7 @@ メイン画面からKYCを非表示にする 資金を追加 入金オプション + Googleウォレットに追加 カード番号 PINを変更する カードは支払いの準備が整いました。 @@ -1876,6 +1894,8 @@ サービスは一時的に利用できません スワップするトークンの量は %s を超えないでください スワップ金額は %s 以上である必要があります + このペアではスワップを利用できません。別のトークンを選択して、もう一度お試しください。 + スワップ非対応のペアです スワップの金額を変更してください このカードは、サンプル品または偽造品である可能性があります 真正性チェックに失敗しました diff --git a/core/res/src/main/res/values-pt-rBR/strings.xml b/core/res/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..04ca28b1d4 --- /dev/null +++ b/core/res/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,2197 @@ + + + Sem um código de acesso, sua carteira não está segura. + Ignorar de qualquer forma + Código de acesso não configurado + Alterar código + Seu código de acesso desbloqueia e protege o acesso à sua carteira. + Use de qualquer forma + Este código de acesso pode ser facilmente adivinhado. + Insira o código de acesso + Código de acesso incorreto. Sua carteira digital será excluída após %s mais tentativas incorretas. + Código de acesso incorreto. O aplicativo será bloqueado em seguida. %s mais tentativas fracassadas + Código de acesso incorreto.\nPor favor, aguarde %s segundos e tente novamente. + Confirme seu código de acesso para continuar. + Digite novamente o código de acesso. + Defina um %sCódigo de acesso de -dígitos para desbloquear sua carteira. + Criar código de acesso + Código de acesso + Você não pode criar mais do que %1$s Contas. Arquive uma para adicionar uma nova. + Não é possível adicionar uma nova conta. + Conta arquivada + Contas arquivadas + Recuperar + Você está prestes a recuperar \"%1$s\". + Recuperar conta + Você atingiu o limite de 20 contas ativas. Arquive uma conta para recuperar esta. + Não consigo recuperar a conta. + Arquivado + Não foi possível arquivar a conta. Tente novamente mais tarde. + Esta conta participa do programa de indicações. + Esta conta não pode ser arquivada. + Não foi possível criar a conta. Tente novamente mais tarde. + Conta criada + Conta arquivada + Arquivo + Você está arquivando esta conta, mas poderá recuperá-la a qualquer momento. + Arquivando... + Conta + Não consigo editar a conta. + Conta salva + Conta para recompensas + Conta #%s — usado para derivação de endereços. + Adicionar conta + Salvar + Nome da conta + Já existe uma conta com esse nome. Por favor, escolha um nome diferente. + Nome da conta já em uso + Conta + Nova conta + Adicionar conta + Editar conta + Por favor, tente novamente mais tarde. Se o problema persistir, entre em contato com o suporte e nós o ajudaremos a resolvê-lo. + %1$s em %2$s + Conta principal + Você já ultrapassou o limite de %1$s contas ativas. Arquive uma para recuperar + Não consigo recuperar a conta. + Conta recuperada + Pressione e segure uma conta para reordená-las. + Continue editando + Descartar + Tem certeza de que deseja descartar a nova conta? + Tem certeza de que deseja descartar as edições? + Alterações não salvas + Alguns tokens personalizados serão movidos automaticamente de “%1$s\" para \"%2$s\"pois sua derivação pertence a essa explicação.\" + Alguns tokens personalizados serão movidos automaticamente. + Não consegue encontrar o seu token? Vá até a seção Mercado na página principal e adicione-o ao seu portfólio para compra. + Não consegue encontrar o seu token? Vá para a seção Mercado na página principal e adicione-o ao seu portfólio para venda. + Vender + Isso pode levar alguns segundos. Por favor, tente novamente mais tarde. + Os dados ainda não foram carregados. + A ação está indisponível no momento. Tente novamente mais tarde ou atualize os dados deslizando o dedo para baixo na tela. + A ação não está disponível. + Escolha o token + Não consegue encontrar o seu token? Vá para a seção Mercado na página principal e adicione-o ao seu portfólio para troca. + Não há tokens disponíveis para trocar pelo token selecionado. Por favor, escolha outro. + Nenhum par disponível + Para utilizar a funcionalidade de troca, sua carteira deve conter pelo menos 2 tokens. + Adicionar tokens + Você adicionou apenas 1 token à sua carteira. Para usar a função de troca, você precisa adicionar pelo menos 2 tokens. + Adicionar tokens + Escolha o token que deseja receber. + Escolha o token que deseja trocar. + Escolha a rede + Adicionar token personalizado + Gerenciar tokens + Enviar somente %1$s (%2$s) de %3$s A rede não está vinculada a este endereço. O uso de outros tokens e redes pode resultar na perda de fundos. + Padrão + Legado + Ocorreu um problema com a biometria. Tente redefinir a biometria do seu dispositivo ou entre em contato com o suporte. + Erro de autenticação + Como escanear + Solicitar suporte + Tente novamente + Este recurso está desativado no modo de demonstração. + Razão: %s + Não foi possível enviar uma transação. + A opção selecionada não é compatível com %1$s rede + Para ativar o %1$s Devido à criptografia do blockchain, você precisará redefinir a carteira para as configurações de fábrica. Por favor, retire seus fundos antes de fazer isso para garantir que não os perca e, em seguida, conclua o processo de redefinição. O acesso à carteira atual não será possível após a redefinição. + Tokens em %1$s Esta placa ou anel não são suportados em nenhuma rede devido a limitações de firmware. + Você está com dificuldades para escanear seu cartão ou anel? + Este cartão não foi projetado para funcionar com este aplicativo. + Defina um código de acesso para ativar a biometria. + Usar %1$s Para desbloquear sua carteira e aprovar ações sensíveis, como assinar transações. No caso de carteiras de hardware, ainda é necessário um cartão ou anel para assinar. + Taxa padrão + Ative a opção Taxa Padrão para definir as taxas de transação automaticamente e ignorar a página de taxas ao enviar fundos. Você sempre poderá retornar a esta página, se necessário. + Acesse as configurações para ativar a autenticação biométrica no aplicativo Tangem. + Ativar autenticação biométrica + Desativar %1$s Você precisará inserir sua senha para desbloquear o aplicativo e interagir com sua carteira. + Seu código de acesso será solicitado posteriormente para armazenamento seguro. + Isso apagará todos os códigos de acesso salvos na carteira. Você precisará inserir o código de acesso novamente para usar a carteira. + Remover os dispositivos salvos exclui todas as carteiras salvas e seus códigos de acesso do aplicativo. + Isso apagará todos os códigos de acesso salvos na carteira. Você precisará inserir o código de acesso novamente para usar a carteira. + Exigir código de acesso + Esta opção desativa a biometria para ações sensíveis. Você precisará inserir seu código de acesso sempre que assinar uma transação. + Salvar código de acesso + A autenticação biométrica será solicitada em vez do código de acesso para interações com seu cartão ou anel. + Mantenha a carteira no aplicativo. + Habilite a vinculação de todas as carteiras ao aplicativo Tangem. A autenticação biométrica será necessária para desbloquear o aplicativo. A assinatura da transação requer o uso do seu cartão ou anel Tangem. + Escuro + Claro + Padrão do sistema + Tema + Configurações do aplicativo + Adicionar carteira + Selecione uma carteira para fazer login. + Bem vindo de volta! + + UM + OUTRO + + Carteira móvel + Você fez o backup da sua carteira com sucesso. + Essas palavras não poderão ser recuperadas caso sejam perdidas. Guarde-as em local seguro. + Backup concluído + Sua frase secreta de recuperação é um conjunto de %s Palavras aleatórias para acessar e recuperar sua carteira. + Se você perder esta frase, ela não poderá ser recuperada. Guarde-a em local absolutamente seguro. + Mantenha-o em segurança. + Salve essas %s palavras em um local seguro que somente você possa acessar e nunca as compartilhe com ninguém. + Não há possibilidade de recuperação + Frase de recuperação + O %s As palavras abaixo são a frase de recuperação da sua carteira. Nunca compartilhe essas palavras com ninguém. A Tangem nunca as solicitará. Use-as para restaurar sua carteira caso perca seu dispositivo. + Anote isso %s Organize as palavras em ordem numérica e mantenha-as em segurança e privacidade. + Você é totalmente responsável por proteger sua carteira e fazer backup da sua frase de recuperação. + Frase de recuperação + Para ocultar ou exibir seus saldos, basta virar a tela do seu dispositivo para baixo ou desligá-la nas Configurações. + Não mostrar novamente + Entendi + Os saldos estão ocultos. + Segundo os desenvolvedores da blockchain, os tokens Kaspa estão atualmente em fase beta. Fique atento para mais novidades! + Modo Beta + A biometria está desativada no seu dispositivo, portanto, você não pode usá-la para desbloquear suas carteiras. Ative a biometria nas configurações do seu dispositivo para usar esse método novamente. + Autenticação biométrica desativada + Por favor, digitalize o cartão ou toque no sino. + Você atingiu o limite de tentativas biométricas. Por favor, desbloqueie sua carteira com um cartão/anel ou insira seu código de acesso. + Autenticação biométrica bloqueada + Por favor, tente novamente em 30 segundos, ou passe o cartão ou toque a campainha. + O login biométrico está temporariamente bloqueado. Tente novamente em 30 segundos ou desbloqueie sua carteira aproximando o dispositivo ou usando um código de acesso. + Muitas tentativas + Você desativou a autenticação biométrica no seu telefone e não poderá salvar carteiras no aplicativo. Para salvar carteiras, ative a função de autenticação biométrica nas configurações do seu telefone. + Os dados biométricos do seu dispositivo foram atualizados. Selecione sua carteira e insira o código de acesso para reativar o login biométrico. + Atenção necessária + Ocorreu um erro ao processar seu código promocional. Tente novamente mais tarde. + Erro de ativação + Seu código promocional foi ativado com sucesso. A recompensa será creditada em sua conta Bitcoin em até 14 dias. + Código promocional ativado + Este código promocional já foi utilizado e não pode ser ativado novamente. + Código indisponível + Este código promocional não é válido e não pode ser ativado. + Código inválido + É necessário um endereço Bitcoin para receber o bônus. Adicione um à sua carteira e tente ativar novamente. + Endereço de Bitcoin necessário + Iniciar processo de backup + Use um cartão bancário ou outros métodos de pagamento. + + dispositivo + dispositivos + + + token + tokens + + Reinicie o próximo dispositivo para continuar. + Reiniciar Carteira + Todos os dispositivos Tangem foram reinicializados. Agora você pode continuar atualizando sua carteira. + Atualize novamente + Reinicialização concluída + Recomendamos concluir o processo de reinicialização para todos os dispositivos Tangem nesta carteira. + Alguns dispositivos Tangem ainda precisam ser reinicializados. + Desative esta opção se não quiser que este cartão seja usado para redefinir códigos de acesso em outros cartões ou anéis nesta carteira. Observe que isso também impedirá que você redefina o código de acesso neste cartão. + Permite usar este cartão para redefinir o código de acesso de outros cartões nesta carteira. + Recuperação do código de acesso + Reiniciar + Tem certeza de que deseja fazer isso? + Alterar código de acesso + O código de acesso será alterado somente neste cartão ou anel. + Todos os dispositivos Tangem na carteira selecionada foram redefinidos para as configurações de fábrica. Agora você pode criar uma nova carteira. + Reinicialização concluída + Deseja redefinir o próximo dispositivo nesta carteira? + Redefinição da carteira + Recomendamos concluir o processo de reinicialização para todos os dispositivos Tangem nesta carteira. + Você não reiniciou todos os seus dispositivos Tangem. + Restaurar configurações de fábrica + Modo de segurança + Configurações do dispositivo + Além da taxa de rede, a rede Cardano cobra %1$s ADA ao realizar transações com o %2$s token + Requisitos de transação Cardano + Para fazer um %1$s Para realizar a transação, você precisa depositar alguns ADA para cobrir a taxa de rede e o valor mínimo de ADA (recomenda-se 5 ADA). + ADA insuficiente para transferência de tokens. + O valor enviado e o troco não podem ser inferiores a 1 ADA. + Você precisa manter alguns ADA porque possui tokens na blockchain Cardano. + Não há ADA suficiente + Aceitar + Acesso negado + Conta + Contas + Ativar + Adicionar + Adicionar ao portfólio + Adicionar token + Adicionar tokens + Adicionado + Endereço + Todos + Permitir + Quantia + Análises + e + Aplicar + Aprovação + Aprovar + Atenção + Redes disponíveis + Backup + Saldo%s + Saldo + autenticação biométrica + biometria + Falha ao criar a transação + Comprar + Vá para %1$s + Você não concedeu acesso à sua câmera. Ajuste suas configurações de privacidade. + Cancelar + Mudar + Selecione a conta + Escolha uma ação + Escolha a rede + Escolha o token + Escolha a carteira + Reclamar + Reivindique recompensas + Fechar + Em breve + Confirmar + Conectando + Contate o suporte + Entre em contato com o suporte da Tangem. + Entre em contato com o Suporte Visa + Continuar + Converter + Cópia + Copiar endereço + Criar + %1$s (%2$s) + Personalizado + + dia + dias + + + Dia + Dias + + Excluir + Desativar + Desabilitado + Desconectar + Feito + Editar + Ativar + Habilitado + Erro + taxa de recarga de rede + Trocar + Explorar + Explore o histórico de transações + Explorador + Falha ao receber a taxa + As taxas de rede são encargos que os usuários pagam para processar e confirmar transações. O valor da taxa pode ser afetado pela congestão da rede, pelo tamanho da transação e pela prioridade de execução. %s + Rápido + Mercado + Lento + Velocidade e taxa + Terminar + Esquecer + Grátis + De + De %s + Sincronizar endereços + Comece agora + Obter token + Ir para o provedor + Ir para o token + Entendi + Esconder + Mantenha-se em %s + hora + Importar + Em andamento + Mais tarde + Saber mais + %1$s falta + Endereço Bitcoin + Bloqueado + Carteiras bloqueadas + Rede principal + mês + Taxa de rede + O valor enviado será reduzido em %1$s (%2$s) para cobrir o nível de taxa selecionado + + UM + OUTRO + + Novo endereço + Notícias + Próximo + NFT + Não + Sem endereço + Nenhum resultado + Não adicionado + Não disponível + Agora não + Agora + OK + Abrir no navegador + ou + Cartão principal + Anel primário + Senha + Colar + política de Privacidade + %1$s-%2$s + %1$s — %2$s + Leia mais + Receber + Recomendado + Rejeitar + Recarregar + Renomear + Obrigatório + Reiniciar + Salvar + Salvar alterações + Procurar + Tokens de pesquisa + segundos + Veja tudo + Frase-semente + Selecione a ação + Vender + Enviar + Falha ao enviar a transação + O servidor não está disponível. Tente novamente mais tarde. + Compartilhar + Compartilhar link + Mostrar menos + Mostrar mais + Assine + Assine e envie + Pular + Algo deu errado + Stake + Apostas + Começar + Enviar + Sucesso + Suporte + Redes suportadas + Trocar + Tangem + Carteira Tangem + Toque e segure + termos e Condições + Termos de Uso + Para + Para %s + Hoje + Token a ser enviado + + token + tokens + + Transação falhou + Status da transação + Transações + Transferir + Não foi possível carregar os dados… + Eu entendo + Entendi, continue. + Ocorreu um erro. Por favor, tente novamente. + Desbloquear + Inalcançável + Unstake + Devido a %1$s limitações apenas %2$d Os UTXOs podem caber em uma única transação. Isso significa que você só pode enviar %3$s ou menos. Você precisa reduzir a quantidade. + Valor copiado + Carteiras + semana + com + Sim + Modo de rendimento + Endereço do contrato copiado! + Redes disponíveis + A derivação do seu token corresponde à derivação de %1$sSeu token será adicionado a esta conta. + A derivação pertence a outra conta. + Token adicionado a %1$s conta + Endereço do contrato + O endereço do contrato é inválido. + Por favor, selecione a rede. + Este token já foi adicionado à lista. + O token já existe. + O valor decimal deve ser um número inteiro válido, até um limite de %d + Derivação personalizada + Exemplo: m/00\'/0000\'/0\'/0/0 + Insira uma derivação personalizada + Decimais + Caminho de Derivação + Padrão + Tipo de moeda BIP44 + O caminho de derivação que você inseriu não é válido. + Exemplo: Moeda USD + Nome + Não selecionado + Rede + Rede de tokens + Você pode adicionar manualmente um token que não seja suportado nativamente pelo Tangem. + Exemplo: USDC + Símbolo + Símbolo do token + Este token/rede já foi adicionado à sua lista. + Observe que qualquer pessoa pode criar tokens. Tenha cuidado ao adicionar tokens fraudulentos, pois eles podem não custar nada. + Tenha cuidado ao adicionar tokens fraudulentos, eles podem não custar nada. + Note que os tokens podem ser criados por qualquer pessoa. + Compre a carteira Tangem + Bate-papo + Código de acesso + Você precisará inserir o código de acesso correto antes de escanear o cartão. + Toque longo + Esse mecanismo protege contra ataques de proximidade em um cartão ou anel. Ele impõe um atraso entre o recebimento e a execução de um comando. + Código de acesso + Antes de executar qualquer comando que implique uma alteração no estado do cartão, você precisará inserir a senha. + Faça upgrade para uma carteira de hardware. + NFT + Programa de indicação + Vire a tela do seu dispositivo para baixo para ocultar e exibir rapidamente os saldos. + %s hashes + ID do dispositivo + Abra o chat de suporte + Link para mais cartões + Moeda do aplicativo + Virar para ocultar Saldos + Emissor + Assinado + Enviar feedback + Detalhes + Você só pode ter uma carteira móvel. Atualize para a carteira de hardware Tangem ou adicione uma nova carteira de hardware. + Verifique sua conexão com a internet ou mude para uma rede diferente. + Termos de serviço + Endereço padrão + Legado %s Endereço + Receber ativos + %s endereço + O envio de ativos por outras redes resultará em perda permanente. + %s rede + Envie fundos usando apenas + Melhores oportunidades + Limpar filtro + A lista está temporariamente vazia, pois está sendo atualizada. Volte daqui a pouco. + Todas as redes + Todos os tipos + Filtrar por + Minhas redes + Redes + Utilizado principalmente + Nenhum resultado + Ganhar + Olá equipe de suporte, encontrei um erro com o seguinte código: %s + Erro no WalletConnect + Você usou um cartão ou anel de outra carteira. Toque no cartão ou anel associado a esta carteira. + Não há fundos suficientes para esta transação. Por favor, adicione mais fundos à sua conta. + Troque qualquer ativo da sua carteira por este token. + Meus tokens + Você ainda não adicionou nenhum token. Adicione tokens pelo Mercado para trocar. + Não pode ser trocado por %s + Fornecido por + Status + Escolha o fornecedor + Os provedores facilitam as transações. + Fornecedor + Ocorreu um erro. Código: %s + Erro %1$sO provedor selecionado não pode processar a transação especificada. Arredonde o valor para cima. %2$s ou alterá-lo + O provedor selecionado está indisponível no momento. Tente novamente mais tarde. (Código: %s) + Trocas não estão disponíveis no momento. Tente novamente mais tarde. (Código: %s) + Valor estimado + Troca por %s + Acesse o site do fornecedor para solicitar o reembolso. + Operação falhou devido ao provedor + Sua conversão está demorando mais do que o normal, mas seus fundos estão completamente seguros e serão entregues. Em caso de dúvidas, entre em contato com a equipe de suporte do provedor. + Tempo de transação longo + O valor da transação foi reembolsado em %1$s para sua carteira devido às regras do OKX ou da ponte. %2$s + O valor foi reembolsado em %1$s (%2$s rede) + Visite o site do fornecedor para verificação. + Verificação KYC exigida pelo fornecedor + Compra concluída + Aguardando compra + Aguardando compra... + Transação cancelada + Depósito confirmado + Aguardando confirmação + Aguardando confirmação... + Troca concluída + Aguardando troca + Aguardando troca... + A troca falhou + Troca pausada + Depósito recebido + Aguardando depósito + Aguardando depósito... + Reembolso concluído + Aguardando reembolso + Enviando para você + Enviando de fundos... + Fundos enviados + Dados fornecidos pelo fornecedor. O valor estimado está sujeito a alterações devido às condições de mercado. + Status da troca + Verificação necessária + Aguardando hash da transação + Lista de todos os tokens adicionados à sua carteira. + Obtendo as taxas atuais... + taxa flutuante + Ao utilizar a funcionalidade de troca, você concorda com os termos do provedor. %s + Ao utilizar a funcionalidade de troca, você concorda com os termos do provedor. %1$s e %2$s. + Mais fornecedores estarão disponíveis em breve. + Fornecedor + Melhor tarifa + Lista de advertências da FCA + Tarifa competitiva + Fornecedor na lista de advertências da FCA + Disponível até %s + Disponível em %s + Indisponível para este par + Permissão necessária + Recomendado + Comprado %s + Comprando %s + Comprando %s... + Ocultar esta transação + Se você ocultar esta transação, ela não aparecerá mais na tela de status. Se você quiser apenas fechar a tela de status e retornar mais tarde, basta deslizar para o lado para descartá-la. + Ocultar o status da transação? + Este token não é compatível. Por favor, escolha um token diferente para usar em substituição. + %s não é suportado + Trocar com + Nenhum token encontrado. Tente novamente. + ID: %s + ID da transação copiado + Troque qualquer ativo da sua carteira por este token. + Maior velocidade significa confirmação mais rápida e uma taxa de rede mais alta. %s + Escolha a velocidade + Escolha qual token usar para pagar a taxa de rede. %s + Escolha o token + Mercado e Notícias + Em alta agora + As informações a seguir são opcionais. Você pode apagá-las se não quiser compartilhá-las. + Diga-nos quais funções estão faltando e tentaremos ajudá-lo. + Por favor, diga-nos qual cartão ou anel você possui. + Olá equipe de suporte, + Por favor, conte-nos mais sobre o seu problema. Cada pequeno detalhe pode ajudar. + Problema de backup + Carteira previamente ativada + Minhas sugestões + Não é possível escanear um Cartão/Anel + Opinião + Feedback Tangem + Não foi possível enviar uma transação. + Erro na descrição da moeda + Fundos insuficientes + Taxa de transação + Ocorreu um erro. + Ocorreu um erro. Código: %s. + Requer memorando + Transação + Ao aprovar, você permite que o contrato inteligente utilize seus tokens em transações futuras. + Quantia %s + A função Aprovar é necessária para conceder permissão a outro endereço para usar uma quantidade específica de seus tokens. Por definição, os contratos inteligentes não podem acessar seus tokens a menos que você aprove. Ao \"desbloquear\" seus tokens, você autoriza o contrato inteligente StakeKit a usá-los. Os mineradores da rede recebem uma taxa de gás (paga por você) para registrar essa ação no blockchain. Você pode fazer staking de seus tokens após conceder a aprovação. + Para continuar, você precisa permitir que o contrato inteligente da Polygon use seus dados. %s + Para continuar, conceda %1s permissão de contratos inteligentes para usar seu %2s + Conceder permissão + Ilimitado + Os endereços são gerados diretamente na sua carteira de hardware Tangem — prontos para usar e totalmente protegidos. + Novos endereços + Adicione a carteira Tangem + Sua chave privada será gerada diretamente dentro do cartão Tangem e nunca sairá dele. + Geração de chaves + Todas as operações criptográficas ocorrem dentro do chip de segurança, certificado contra clonagem e adulteração física. + Segurança em nível de hardware + Adicionar carteira existente + Criar nova carteira + Encomendar Tangem + Escanear Tangem + Deseja permitir que a \"Tangem\" utilize autenticação biométrica para confirmar sua identidade e abrir o aplicativo? + para %s + em %s rede + Tem certeza de que deseja cancelar a configuração do código de acesso? + Faça backup agora + Para concluir a configuração, faça backup da sua carteira e proteja o aplicativo com um código de acesso. + Finalize agora + Finalize a configuração da carteira. + Conclua a configuração protegendo o aplicativo com um código de acesso. + Se você sair, terá que começar tudo de novo. + Tem certeza de que deseja cancelar a ativação? + Mantém suas criptomoedas seguras e offline. Fino como um cartão de crédito, mais seguro que um cofre de banco. + Se fizer isso, terá que começar tudo de novo. + Recupere sua carteira existente por meio do backup do Google Drive. + Backup do Google Drive + Crie uma carteira segura e transfira seus fundos para obter proteção adicional. + Criar nova carteira + Aumente a sua segurança com a carteira de hardware superior da Tangem. + Carteira de hardware + Converta sua carteira móvel atual em uma carteira fria Tangem. + Atualize sua carteira atual + Ir para o backup + Faça um backup da sua carteira antes de criar um código de acesso. + Conclua o backup primeiro. + Finalize o backup primeiro. + Incompleto + Outros métodos + Guarde sua frase de recuperação em um local seguro e mantenha-a em sigilo para proteger seus fundos, e configure um código de acesso para segurança adicional. + Salve sua frase de recuperação em um lugar seguro e mantenha-a em sigilo para proteger seus fundos. + Frase de recuperação + Para proteger sua carteira com um código de acesso, conclua o processo de backup. + Para atualizar para uma carteira de hardware, conclua o processo de backup. + Atualize sua carteira móvel para uma carteira de hardware Tangem para obter a mais alta segurança. Importe sua carteira ou transfira fundos para uma nova. + Atualize para carteira fria + Suas chaves privadas são criptografadas com segurança e armazenadas em seu telefone. + As chaves privadas permanecem no seu dispositivo. + Crie ou restaure sua carteira com uma frase de recuperação. + backup da frase-semente + Criar carteira móvel + Transfira sua carteira móvel para um cartão ou anel Tangem a qualquer momento, com segurança. + Atualização para carteira de hardware + Importar carteira existente + Esta frase de recuperação já foi importada. + Carteira móvel + Esqueça a carteira + Esta carteira será removida permanentemente do seu dispositivo. + Tem certeza de que deseja fazer isso? + Esqueça a carteira + Ir para o backup + Ver frase de recuperação + Esqueça a carteira + Esqueça de qualquer forma + Esta carteira possui um backup. Certifique-se de que você pode recuperá-la antes de esquecer a carteira. + Se você esquecer esta carteira sem um backup, perderá permanentemente o acesso aos seus fundos. + Tem certeza de que deseja esquecer esta carteira? + Entendo que, se eu não fizer um backup da minha carteira antes de removê-la, perderei o acesso a ela. + Entendo que remover minha carteira não a exclui, apenas a remove do meu dispositivo. + Atualizar + Ao atualizar sua carteira digital para um cartão ou anel Tangem, todos os seus endereços e saldos permanecem totalmente acessíveis. + Mesmos endereços + Não é possível atualizar. Já existe uma carteira neste dispositivo. + Escolha outro dispositivo. Este não pode ser usado para a atualização. + Ocorreu um erro durante a operação. + Seus fundos permanecem seguros e totalmente acessíveis durante todo o processo. + Acesso a fundos + Após a atualização, sua carteira móvel é removida do aplicativo e armazenada em sua carteira de hardware Tangem. Sua frase de recuperação permanece com você. + Segurança geral + As chaves privadas serão transferidas do aplicativo para sua carteira de hardware Tangem. + Migração chave + Dispositivo de digitalização + Iniciar atualização + Você está prestes a atualizar para nossa carteira de hardware. Ela manterá seus ativos seguros em armazenamento offline. + Carteira Tangem + Faça upgrade para nossa carteira de hardware. + Proteja suas criptomoedas com a carteira de hardware de alta qualidade da Tangem. + Atualize a segurança da sua carteira para hardware. + Esta informação foi gerada com IA.\nToque aqui se encontrar algum erro. + Para alterar o código de acesso, aproxime o cartão ou toque-o conforme mostrado acima e não o remova até o final da operação. + Para alterar a senha, aproxime o cartão conforme mostrado acima e não o remova até o final da operação. + Para criar a carteira, aproxime o cartão conforme mostrado acima e não o remova até o final da operação. + Para criar a carteira, toque no anel conforme mostrado acima e não o remova até o final da operação. + Toque no cartão #%s da carteira + Toque para digitalizar + Toque para assinar + Toque no Cartão ou no Anel + Você atualizou seus dados biométricos. Escaneie seu cartão ou toque a campainha para entrar. + Seu saldo deve ser superior ao valor da taxa para efetuar uma transferência. + Saldo insuficiente + Você não possui Mana suficiente para esta transação. Aguarde até que sua Mana seja recarregada. Seu saldo de Mana é %1$s/%2$s + Mana insuficiente + Você só pode transferir %s devido ao limite de Mana imposto pela rede Koinos + Limite de mana + A rede Koinos exige Mana para o pagamento das taxas de rede. Você tem %1$s/%2$s Mana + Nível de mana + Para começar a rastrear seus criptoativos e transações, adicione tokens. + Gerenciar tokens + Leia o código QR para enviar fundos ou conectar-se a um aplicativo + Para acessar todas as redes, você precisa escanear o cartão. + Escaneie seu cartão ou toque + Aproveitar %1$s Taxas de serviço em swaps via Changelly a partir de fevereiro %2$s-%3$s + Trocar com Changelly, %s tarifas + Tokens + Adicionar + Editar + capitalização de mercado da moeda + Blockchain, a criptomoeda, foi inicialmente criada. + Rede nativa + A utilização de redes não nativas para tokens permite a interoperabilidade entre blockchains, possibilitando que ativos sejam utilizados em diversas aplicações descentralizadas e contratos inteligentes em diferentes plataformas. No entanto, isso geralmente envolve um custodiante ou contrato inteligente para manter o ativo original em segurança, introduzindo centralização e risco de contraparte. + Não é a blockchain original ou primária onde o token está hospedado. + Redes não nativas + Escolha redes + Carteira + Não foi possível encontrar este token. Você pode adicioná-lo manualmente. + + de carteira + de carteiras + + Remover + Por exemplo, Bitcoin + Seu portfólio foi atualizado. + O token selecionado está atualmente indisponível para ações na carteira de criptomoedas. Mas não se preocupe, você pode demonstrar seu interesse votando a favor dele. + Voto positivo + A carteira não suporta mais de uma rede. + Sobre a moeda + Para comprar, trocar ou receber este ativo, adicione-o à sua carteira. + Este ativo não é atualmente suportado na carteira. + Este recurso não está disponível para esta carteira. + Adicionar + APY %s + Meu portfólio + Mercado + Ganhe com a Tangem + Para gerar endereços para redes selecionadas, você deve escanear seu cartão ou anel da Tangem Wallet. + Para adicionar tokens, abra esta janela ou toque na barra de pesquisa. + Deslize para cima para explorar o mercado. + Descubra novas joias escondidas + Os dados desta seção são provenientes das seguintes redes: %s + Não foi possível carregar os dados… + Sem dados + Pulso do mercado + Ações rápidas + Pesquisar tokens + Resultado + Veja tokens com capitalização de mercado inferior a 100 mil dólares. + Mostrar tokens + Nenhum resultado + Selecione a rede + Selecione a carteira + 1 mês + 1 ano + 24 horas + 3 meses + 6 meses + 7 dias + Todos + Compradores experientes + capitalização de mercado + Ordenar por + Ganhadores + Perdedores + Tendências + Modo de rendimento + Fazer staking é a maneira mais fácil de receber recompensas em suas criptomoedas. %s + Ganhe até %s APY + Token adicionado + Sobre %s + + exchange + exchanges + + + Com base em avaliação + Com base em avaliações + + Site + Pressão de compra + A diferença entre o volume de compradores e o volume de vendedores. + Pressão de compra + Suprimento circulante + O número total de moedas disponíveis para negociação e em circulação no mercado. + Suprimento circulante + Não foram encontradas Exchanges + Troca + Cuidado + Arriscado + Confiável + Trocas + Compradores experientes + Compradores líquidos com o requisito adicional de terem pelo menos 100 transações de saída. + Compradores ativos + Avaliação totalmente diluída + O valor teórico total de uma criptomoeda, considerando que todas as moedas possíveis estivessem em circulação, incluindo aquelas que não estão atualmente em circulação. + Avaliação totalmente diluída + Data de Gênesis + Alto + Portadores + A variação no número de detentores de tokens dentro de um período de tempo específico. + Portadores + D + M + W + Y + Percepções + Links + Liquidez + A variação na quantidade de liquidez disponível para o token durante o período especificado. + Liquidez + Índice de liquidez + Listado em + Baixo + valor de mercado + O valor total de mercado de uma criptomoeda é calculado multiplicando-se o preço atual da moeda pelo número total de moedas em circulação. + valor de mercado + Posição no mercado + Posição no ranking de criptomoedas entre todas as moedas com base na capitalização de mercado. + Posicionamento de mercado + Fornecimento máximo + O número máximo de moedas ou tokens que podem existir para uma determinada criptomoeda. + Fornecimento máximo + Métricas + Links oficiais + Desempenho de preço + Repositório + Pontuação de segurança + A pontuação de segurança de um token é uma métrica que avalia o nível de segurança de uma blockchain ou token com base em diversos fatores e é compilada a partir das fontes listadas abaixo. + Social + Fornecimento total + O número máximo de moedas ou tokens que podem existir para uma determinada criptomoeda. + Fornecimento total + 24h + Volume de negociação (24h) + O valor total negociado de uma criptomoeda nas últimas 24 horas indica o nível de atividade e liquidez do mercado. + Volume de negociação (24h) + %s no total + Volume + Abra esta opção ou toque na barra de pesquisa para adicionar tokens diretamente do mercado. + Adicionar tokens + Adicionar mais tokens + Potencialize seus ativos, fornecendo-lhes acesso instantâneo. %s + Ativar o modo de rendimento + Você precisa atualizar para %1$s antes de criar uma carteira móvel + A carteira digital requer %1$s ou mais tarde + Todas as notícias + Gosto + + UM + OUTRO + + + UM + OUTRO + + Resumo rápido + Notícias + Tokens relacionados + Notícias relacionadas + Fique por dentro de tudo + Pontuação em alta + A tecnologia NFC não está disponível no seu dispositivo. + Sobre NFTs + Ativo NFT + + Artigo + Artigos + + Os NFTs enviados para o endereço da sua carteira aparecerão aqui. + Ainda não há coleções. + Receba NFTs + coleções NFT + Alguns dados podem não carregar. + Problemas temporários de carregamento + Informações básicas + Cadeia + Endereço do contrato + Chain é a blockchain onde o NFT existe. + O endereço do contrato é um identificador único para o contrato inteligente que rege os tokens na blockchain. + Uma etiqueta que descreve a raridade do NFT. Quanto menor o valor, mais exclusivo é o NFT. + A posição de um NFT no ranking de raridade em relação a outros tokens. Quanto maior a posição, mais raro e valioso é o NFT. + O endereço do token é um identificador exclusivo do token no blockchain, permitindo o rastreamento das transações e da propriedade + O ID do token é um identificador único atribuído a cada token, distinguindo-o dos demais na coleção. + O padrão do token define o tipo de token e como ele funciona com diferentes carteiras e plataformas. + Último preço de venda + Rótulo de raridade + Classificação de raridade + Endereço do token + ID do token + Padrão de token + Características + Nenhum resultado encontrado. Por favor, tente novamente. + Nenhuma coleção + Disponível + Escolha a rede + Receber NFT + Você ainda não adicionou esta rede. Para receber NFTs, adicione-a ao seu portfólio. + Rede não adicionada + Tipos de NFT não suportados + cNFTs e pNFTs ainda não são suportados. Por favor, não os envie para sua carteira. + Enviar NFT + Características + Coleção sem título + %1$d NFTs em %2$d coleções + + NFT em + NFTs em + + Toque aqui para receber o primeiro NFT + coleções NFT + Não foi possível carregar os dados. + Para usar o %1$s rede, você deve pagar a reserva da conta (%2$s %3$s), que bloqueia e oculta esse valor indefinidamente + A conta de destino não está ativa. Enviar %s ou mais para ativar a conta. + Para criar uma conta, envie fundos para este endereço. + A conta de destino não possui uma linha de confiança para o ativo que está sendo enviado. + Ganhe $10 em BTC com cada carteira \n Aproveite! + Black Friday: até 30% DESLIGADO + Vamos lá + Tempo limitado! + 1+1: Compre uma carteira e ganhe 50% DESLIGADO + Cadastre-se agora + Compartilhe seu código e ganhe 5 USDT por venda. Seu amigo ganha 10.% DESLIGADO. + Ganhe RECOMPENSAS por cada amigo! + Compre criptomoedas + Aproveite **0% taxas** na compra de criptomoedas via transferências SEPA. + Compre criptomoedas com SEPA + Entre na lista de espera e receba um cartão de pagamento como nenhum outro. + Cartão Visa Tangem + Termos e Condições + Deposite US$ 100 ou mais, mantenha por 30 dias e receba US$ 10. + Participe da campanha Yield Mode! + Configure um código de acesso único para proteger todos os seus dispositivos. + Proteger + Defina um código de acesso individual para cada cartão ou toque mais tarde. + Personalizar + Recupere o código de acesso com um cartão ou anel vinculado. Não guarde todos os seus dispositivos no mesmo lugar. + Restaurar + Escolha qualquer palavra, frase ou número que desejar como seu código de acesso. + Criar código de acesso + Digite seu código de acesso mais uma vez para evitar erros. + Digite novamente seu código de acesso. + O código de acesso deve ter pelo menos 4 caracteres. + O código de acesso inserido não corresponde ao código de acesso inicial. + Por favor, repita a operação. O cartão será redefinido para as configurações de fábrica. + Erro de ativação + Adicionar tokens + Você adicionou um cartão ou anel de backup. Depois que o backup for finalizado, você não poderá adicionar mais dispositivos. Se você tiver mais um cartão ou anel, adicione-o agora. Deseja continuar? + O backup está parcialmente concluído e não pode ser encerrado agora. + Uma frase-senha é um recurso de segurança opcional que adiciona uma palavra ou frase à sua frase de recuperação, criando um novo conjunto de endereços de carteira para proteção extra. + Adicione um Cartão ou Anel + Digitalizar cartão + Escanear Cartão #%d + Faça backup agora + Escanear Cartão + Digitalizar Anel + Continuar para minha carteira + Finalizar backup + Receba criptomoedas + Escaneie o Cartão principal ou o Anel. + Pular para mais tarde + Como funciona? + Vamos gerar todas as chaves do seu cartão ou anel e criar uma carteira segura. + Criar carteira + Criar uma carteira + Outras opções + Suas chaves serão geradas com segurança dentro do chip. Não há frase mnemônica, o que significa que ninguém pode exportá-las ou roubá-las. + Gere chaves de forma privada + Seu cartão está ativado e pronto para uso. + Sucesso! + Sua carteira está configurada e pronta para uso! + Nesse caso, você precisará começar do início. + Deseja sair do processo de ativação? + Começando + Já existe outra carteira associada ao cartão que você está tentando adicionar. Se você tiver fundos nessa carteira, faça o saque e, em seguida, redefina este cartão e adicione-o como reserva. + Salve sua carteira + Criando um backup + Biometria + Leia mais sobre a frase-semente. + + + Escreva estas %dpalavras na ordem indicada abaixo e guarde-as em um local seguro e secreto. + + Sua frase-semente + + + %dpalavras + + Para importar sua carteira, insira sua frase mnemônica no campo abaixo. + Gerar frase-semente + Importar carteira + Uma frase mnemônica é uma sequência de palavras que permite recuperar sua carteira. Ao contrário das chaves geradas pelo cartão ou anel, as frases mnemônicas não são protegidas e podem ser copiadas e roubadas. Use esta opção por sua conta e risco. + Use a frase-semente + Frase inicial inválida. Verifique a ordem das palavras. + Frase de inicialização inválida. Por favor, verifique sua ortografia. + Legado + Para verificar se você anotou sua frase-semente corretamente, digite a 2ª, a 7ª e a 11ª palavras. + Então, vamos verificar. + Para iniciar o processo de backup, adicione até dois cartões ou anéis de backup. + Você pode adicionar mais um cartão ou anel ou finalizar o processo de backup. + Prepare o cartão de backup com o número %s + Escaneie o cartão principal ou o anel para iniciar o processo de backup. + Prepare o cartão principal com o número %s + Prepare o Anel e pressione o botão de digitalização abaixo. + Sua carteira está configurada e pronta para uso. + Número máximo de dispositivos adicionados. Finalizar o processo de backup. + Ativando a carteira + Cartão de backup + Cartão de backup #%d + Anel de backup + Sem dispositivos de backup + Notificações + Um dispositivo de backup adicionado + Prepare seu Cartão ou Anel. + Dois dispositivos de backup adicionados + Para começar, basta adicionar qualquer valor à sua carteira. + Para começar, basta adicionar mais de um valor à sua carteira. %1$s %2$s + Compre criptomoedas + Mostrar o endereço da carteira + Para começar, basta recarregar a carteira com mais de %1$s + Ative uma carteira + O processo de geminação está parcialmente concluído. Não é possível sair dele agora. + Se o processo de criação da carteira for interrompido de alguma forma, você terá que começar tudo de novo. + Você pode fazer backup das suas chaves em até dois outros cartões ou anéis em branco da Tangem Wallet. + O código de acesso pode ser restaurado com um dos cartões de backup. + Todos os cartões de backup podem ser usados ​​com todas as suas funções, utilizando as mesmas chaves. + Você poderá definir um código de acesso para proteger suas carteiras. + Carteira de backup + Restaurar código de acesso + Cartões idênticos + Código de acesso + Você só pode ter uma carteira móvel. Atualize para a carteira de hardware Tangem ou adicione uma nova carteira de hardware. + Todas as ofertas + Disponível com %s + Os provedores facilitam as transações. + Pesquisar por país + Indisponível + Outras moedas + Fiats populares + Pesquisar por moeda + Esta transação já foi processada. Nenhuma ação adicional é necessária. + Obtendo as melhores taxas... + Instantâneo + Ao utilizar a funcionalidade de acesso prioritário, você concorda com os termos do provedor. %1$s e %2$s + O serviço é fornecido por um provedor externo. A Tangem não se responsabiliza por ele. + O valor da compra não deve ser superior a %s + O valor da compra deve ser de pelo menos %s + Não há fornecedores disponíveis para esta moeda. + Processamento mais rápido + Pagar com + Método de pagamento + Disponível até %s + Disponível em %s + + UM + OUTRO + + Fornecedores + Usado recentemente + Recomendado + Você poderá concluir sua transação por meio do provedor terceirizado. %s + Redirecionando para %s... + Nossos serviços não estão disponíveis neste país. + Sua residência foi identificada como + Residência + Selecione o país correto para garantir opções de pagamento e serviços precisos. + Configurações + Você pode fechar esta tela e verificar o status da transação na tela de detalhes do token. + + até + até + + %s min + Disponível em + Disponível até + Você recebe + O serviço é fornecido por um provedor externo. A Tangem não se responsabiliza por ele. + Você pode fechar esta tela e verificar o status da transação na tela de detalhes do token. + Até + Via + via %s + Você pagará + Grupo + Por equilíbrio + Organizar tokens + Desagrupar + %s suporte + Mais informações + Você pode ativar as notificações do Tangem nas Configurações. + Ativar mais tarde + Configurações + Ativar notificações + Receba alertas de transações recebidas em redes compatíveis. + Notificações de transação + Selecione na galeria + Configurações + Você não concedeu acesso à sua câmera. + Acesso à câmera negado + Não é necessário memorando + %1$s (%2$s) sobre %3$s rede + %1$s sobre %2$s rede + O envio de qualquer outra moeda resultará em sua perda irreversível. + Enviar somente %s Para este endereço. O envio de qualquer outra moeda resultará em sua perda irreversível. + Enviar somente %1$s no %2$s rede + Transfira fundos de qualquer carteira ou corretora. + Endereço para recebimento de recompensas + Participar + Não foi possível carregar as informações sobre o programa de indicações. Tente novamente mais tarde. + Falha ao carregar as informações sobre o programa de indicações. Código de erro: %sPor favor, tente novamente mais tarde. + Pagamentos futuros + Seus amigos compraram + Menos + Mais + Não há pagamentos futuros + + para carteira + para carteiras + + Vou receber ^^%1$s^^ para cada carteira comprada pelo seu amigo no seu %2$s endereço de rede %3$s ^^30 dias depois^^ disso + Você + Vai receber um + ao comprar uma carteira em tangem.com + %s desconto + Seu amigo + Código pessoal copiado! + Seu código pessoal + Compre a carteira Tangem com desconto!\n%s + Indique a Tangem aos seus amigos. + Você aceitou + Ao tocar neste botão, você aceita. + do programa de indicação + + carteira + carteiras + + Reinicie o cartão + Entendo que, após realizar esta ação, não terei mais acesso à carteira atual. + Percebo que não posso usar este cartão para recuperar meu código de acesso nos outros cartões da carteira atual. + Entendo que perderei completamente o acesso ao meu cartão Tangem Pay e a todos os fundos nele contidos, sem possibilidade de recuperação. + A restauração de fábrica apaga completamente a carteira do cartão ou anel selecionado. Você não poderá restaurar a carteira atual nem usar este cartão ou anel para recuperar o código de acesso. + A restauração de fábrica apaga completamente a carteira do cartão ou anel selecionado e a remove do aplicativo. Você não poderá restaurar a carteira atual. + Todos os dispositivos Tangem foram reinicializados. + Ocorreu um problema no processo de ativação. Por favor, reinicie os cartões um por um. + Falha na verificação do cartão + Reinicie o próximo dispositivo para continuar. + Proprietários de Anéis têm direito a 3 trocas sem comissão na Changelly até 15/11! + Trocar por 0% Taxas já disponíveis! + Dispositivos com acesso root são considerados menos seguros. Seus dados podem ficar expostos a riscos adicionais. + Acesso root detectado + Faça login no aplicativo e consulte seu saldo sem precisar escanear o cartão ou tocar o anel. + Acesse o aplicativo + Permitir o uso de biometria + Para interagir com sua carteira, serão solicitados dados biométricos em vez do código de acesso. + Código de acesso + Não permita + Parece que você desativou a autenticação biométrica. É necessário salvar as carteiras. + Ativar autorização biométrica + Você gostaria de usar biometria? + Observe que, para realizar uma transação com seus fundos, você ainda precisará do seu cartão ou anel. + Escanear Cartão ou Anel + Escaneie o cartão ou anel para alterar suas configurações. As alterações afetarão apenas o cartão ou anel que você escaneou e não afetarão outros dispositivos vinculados à sua carteira. + Prepare seu Tangem! + Alerta de segurança + Não, eu não fiz isso. + Sim, me guie + Você não possui saldo suficiente para vender criptomoedas. Por favor, deposite o ativo desejado para prosseguir. + Saldo insuficiente + A venda de criptomoedas não está disponível na sua região no momento. Estamos trabalhando ativamente para disponibilizar essa opção em breve — fique atento! + Restrição Regional + Já incluído no endereço inserido + O valor da sua comissão é %s vezes superior à quantidade recomendada. Por favor, revise e ajuste suas configurações personalizadas. + Você especificou uma comissão abaixo do valor recomendado, o que pode causar atraso na sua transação. Deseja continuar? + Razão: %1$sCódigo: %2$s + A transação não foi concluída. + Trocar para outro token ou rede + Quantia + Será enviado ao destinatário. + Você pode definir sua taxa de transação ajustando o valor no campo Satoshi por vByte. + A taxa que será cobrada pela sua transação. Você pode definir o valor. + Taxa máxima + Este é o preço que você está disposto a pagar por unidade de gás. Quanto maior o preço do gás, mais rápido sua transação será processada. (Taxa de prioridade incluída) + Taxa prioritária + A taxa que um usuário pode pagar aos mineradores ou validadores para agilizar a inclusão de sua transação em um bloco. + A taxa cobrada para usar cada saída de transação não gasta (UTXO) na rede Kaspa. Quanto mais UTXOs você usar em uma transação, maior será a taxa. + KAS por UTXO + %1$s, %2$s + Etiqueta de destino + Insira o endereço + Nome ou endereço ENS + O endereço é o mesmo que o endereço da carteira. + O valor mínimo é %s + A mudança mínima é %s + Taxa inválida + O saldo mínimo é %s + A conta de destino não foi criada. O valor a ser enviado deve ser %s + taxa ou mais + Erro desconhecido + Memorando inválido. Não será adicionado à transação. + Memorando + Verifique sua conexão de rede. + Informações sobre tarifas de rede indisponíveis + Você envia + De %s + Limite de gás + Este é o valor máximo de gás que será gasto para concluir uma transação ou contrato. Um limite de gás evita cobranças inesperadas ou ilimitadas ao executar uma transação. + Preço do gás + Este é o preço que você está disposto a pagar por cada unidade de gás. Quanto maior o preço do gás, mais rápido sua transação será processada. + Máximo + Valor máximo + Taxa até + Memorando: %s + Memorando inválido + Cobertura da taxa de rede + + %d O token não é compatível com este endereço. + %d Os tokens não são compatíveis com este endereço. + + Nonce + Número único para cada transação. Use-o para reenviar ou cancelar uma transação pendente. + Insira o nonce... + Fundos insuficientes para a transferência, pois o total da taxa e do valor da transferência excede o saldo disponível. + O total excede o saldo + Um equilíbrio de pelo menos %s É necessário manter sua conta na blockchain para evitar riscos de segurança. Esse valor permanecerá em seu saldo e não poderá ser sacado. + Depósito existencial + O valor da sua comissão é %s vezes maior que a quantidade recomendada. Por favor, revise e ajuste suas configurações personalizadas. + A taxa personalizada é alta + Devido às peculiaridades do %1$s Na rede, a taxa para transferir o saldo total é mais alta. Para reduzir a comissão, você pode sair %2$s. + A taxa é mais alta + A conta do destinatário não está ativada. O valor mínimo da transferência deve ser igual ou superior ao saldo isento de aluguel. %1$s. + O saldo da sua conta não pode ser inferior ao valor do aluguel. Por favor, mantenha um saldo mínimo de pelo menos [valor omitido]. %1$s em sua conta ou retire todos os fundos. + A comissão incluída excede o valor da transferência, resultando em um valor negativo. + Valor inválido + O valor mínimo para envio é %1$sCertifique-se de que o saldo restante após o envio não seja inferior a %2$s. + A conta de destino não foi criada. Por favor, altere o valor a ser enviado. + O valor a ser enviado deve ser de pelo menos %s + Deixar %s + Reduzir por %s + Reduzir para %s + Informamos que a sua transação poderá sofrer atrasos devido a determinadas taxas. + Atrasos na transação são possíveis. + Devido a %1$s limitações apenas %2$s Os UTXOs podem caber em uma única transação. Isso significa que você só pode enviar %3$s ou menos. Você precisa reduzir a quantidade. + Limitação de transação + Opcional + Alinhe o seu código QR com o quadrado para escaneá-lo. Certifique-se de escanear corretamente. %s endereço de rede. + Recente + Destinatário + Endereço inválido + Certifique-se de que o endereço do destinatário esteja no **o %s rede** para evitar a perda de seus fundos + Enviar para + Uma etiqueta de memorando/destino é um ID exclusivo para diferenciar transações enviadas para o mesmo destinatário na mesma rede. **Atenção: a omissão de um memorando pode levar à extravio de fundos.** + Memo/Destination Tag é um código que separa as transações destinadas a um destinatário comum em uma rede criptográfica. + Atenção: O não cumprimento de um memorando pode levar à perda de fundos. + Minhas carteiras + Uma forma de medir as taxas de transação do Bitcoin. Indica a quantidade da menor unidade de Bitcoin (Satoshi) por byte virtual em uma transação. Quanto maior o número, mais rápido a transação será processada pelos mineradores. + Satoshi / vByte + Enviando... + Toque em qualquer campo para alterá-lo. + Enviar %s + Você está enviando **%1$s** incluindo uma taxa de rede de %2$s. + Você está enviando **%1$s** e %2$s + Você está enviando **%1$s** + A taxa de rede será coberta pelo uso. %1$s energia + A taxa de rede será reduzida ao gastar %1$s energia + incluindo uma taxa de rede de %1$s + Para endereço + A transação foi assinada e enviada com sucesso para o nó da blockchain. O saldo da carteira será atualizado em breve. + %1$s Tron é um ativo na rede Tron. Para calcular a taxa e realizar uma transação, você precisa depositar alguns Tron (TRX) em sua conta. + O valor excede o saldo. + É necessário um marcador de destino (memorando) para concluir esta transação para o endereço especificado. + Etiqueta de destino obrigatória + Valor inválido + A taxa excede o saldo + O valor total excede o saldo. + Tem certeza de que deseja alterar o token de recebimento? Isso redefinirá os dados inseridos anteriormente. + Alterar token + Trocar e enviar + Deseja prosseguir com a troca? Isso apagará seus dados anteriores. + Confirmar conversão + O envio de qualquer outra moeda resultará em sua perda irreversível. + Selecione a rede de destinatários correta. + Escolha qualquer token para receber. Seu destinatário receberá exatamente o que você selecionou — sem complicações. + O destinatário receberá + Para o destinatário + Valor a receber + O destinatário recebe %s + Tem certeza de que deseja cancelar a conversão? Seus dados anteriores serão apagados. + Remover conversão + Enviar com troca + Transação enviada + Prepare-se para escanear o Cartão ou Anel que deseja configurar. + Esqueça a carteira + Isso removerá a carteira do aplicativo. A carteira poderá ser adicionada novamente. + Fácil de usar + Mantém suas criptomoedas seguras e offline. Fino como um cartão de crédito, mais seguro que um cofre de banco. + Sem frase-semente + A melhor carteira de hardware da categoria + Carteira fria Tangem + Nome + Coloque seu token para trabalhar. + Uma taxa de rede é um pequeno pagamento necessário para processar e confirmar sua transação na blockchain. + Para começar a fazer staking, sua conta TON precisa ser ativada com uma transação de 1 TON. Os fundos permanecem em sua conta, pois esta etapa apenas a ativa para staking. + Ativação de conta + A taxa de rede foi alterada. Por favor, verifique o novo valor antes de prosseguir. + Taxa de rede atualizada + O valor do staking deve ser de pelo menos %s + O valor de staking será arredondado para %1$s TRX devido às regras da rede. + O valor do resgate será arredondado para %1$s TRX devido às regras da rede. + APR %1$s%% + Suas recompensas de staking começarão após 5 épocas (aproximadamente 25 dias), enquanto sua delegação estiver registrada e contabilizada pela rede. + Reivindicação staking + Taxa de conta de staking + Uma conta de staking é uma conta especial onde os tokens SOL em staking são armazenados. Ela é criada quando você delega seus tokens a um validador para participar da validação de transações e receber recompensas. Uma pequena taxa é cobrada pela criação da conta de staking, a qual é devolvida após a conclusão do staking. + Taxa percentual anual + APR: Mostra a taxa de juros que você poderia ganhar em um ano sem capitalização. Os juros ganhos não são adicionados ao seu saldo, portanto, seus rendimentos não aumentam por si só. + Rendimento percentual anual + APY: Mostra o total de juros que você poderia ganhar em um ano com capitalização. Capitalização significa que os juros ganhos são adicionados ao seu saldo, de forma que você também ganha juros sobre esses juros. + APR + APY + As recompensas acumulam-se automaticamente no seu saldo de staking diariamente. + As recompensas são acumuladas no seu saldo de staking. Fundos ganhos: %s + Disponível + Taxa média de recompensa + Como funciona o staking? + %s lucro estimado + Posição no mercado + Métricas + De acordo com %1$s regras de rede, reivindicações são possíveis de %2$sOs valores abaixo serão creditados em sua conta após o resgate dos ativos. + Requisito mínimo + Nenhuma recompensa disponível + Reivindicação de recompensa + Método de recebimento de recompensas de staking. Pode ser automático, em que a recompensa é creditada em seu endereço, ou manual, em que você precisa sacar a recompensa criando uma transação para recebê-la. + Cronograma de recompensas + Este é um cronograma que determina quando os participantes do staking recebem suas recompensas. O tempo de distribuição das recompensas pode variar ligeiramente dependendo do validador e da carga da rede. + Recompensas: %s + Staking %s + Período de Desvinculação + O período que você deve aguardar após solicitar o saque de fundos do staking para que os tokens fiquem disponíveis. + Período de aquecimento + O período alocado para ativar a participação no staking. + Não há validadores disponíveis no momento. Tente novamente mais tarde. + Staking indisponível + A rede cobrará uma taxa de aprovação de token para verificar se você está autorizando o uso do seu token para staking. + Ao utilizar a funcionalidade de staking, você concorda com os termos do provedor. %1$s e %2$s + Trancado + Quantidade máxima: %s + Migrar + Staking nativo + Não há validadores ativos disponíveis para staking no momento. Tente novamente mais tarde. + Ao fazer staking na rede Cardano, todo o seu saldo é utilizado. 2 ADA adicionais serão reservados e devolvidos após o desbloqueio. Seus ADA permanecem desbloqueados durante o staking. + Detalhes de engaste da ADA + As recompensas ganhas serão enviadas para sua carteira e estarão disponíveis para uso imediatamente. + A Tangem permite que os usuários façam staking de suas criptomoedas. + A Tangem permite que os usuários façam staking de suas criptomoedas. + A Tangem permite que os usuários façam staking de suas criptomoedas. + A Tangem permite que os usuários façam staking de suas criptomoedas. + O staking permite que você receba %1$sSuas recompensas de staking chegam todos os dias. + O staking permite que você receba %1$sSuas recompensas de staking chegam a cada hora. + O staking permite que você receba %1$sSuas recompensas de staking chegam todo mês. + O staking permite que você receba %1$sSuas recompensas de staking chegam toda semana. + A Tangem permite que os usuários façam staking de suas criptomoedas. + Ganhe recompensas com staking + Seu saldo em staking restante será muito baixo para ser retirado. Você precisará fazer staking de mais fundos para atingir o valor mínimo necessário para a retirada. + Saldo baixo em staking + No mínimo, %1$s %2$s É necessário refazer o cadastro. Por favor, recarregue seu saldo. + Não é suficiente %s + Saldo insuficiente para staking + É necessário um mínimo de 3 ADA para refazer a reserva. Por favor, recarregue seu saldo. + Não há ADA suficiente + O valor mínimo para staking deve ser superior a 5 ADA. Por favor, adicione fundos ao seu saldo para começar a fazer staking. + O staking está indisponível no momento devido a condições da rede. Tente novamente mais tarde. + Staking no %1$s Uma rede com um novo validador transferirá automaticamente todos os fundos previamente alocados para esse validador. + Reinveste as recompensas ganhas no valor apostado, aumentando os ganhos potenciais. + O Restake permite que você transfira seus fundos de um validador para outro sem precisar remover seus fundos do staking. + Se você fizer staking de todo o seu saldo, precisará pagar uma taxa de rede ao retirar os fundos. Recomendamos deixar um pequeno valor em sua carteira para cobrir essas taxas. + Para começar a fazer staking, você precisa ativar sua conta TON primeiro. + Ativação de conta + Para começar a fazer staking de TON, primeiro envie uma pequena transação para o seu próprio endereço — isso ativará sua carteira. + Poderá ser necessário um valor adicional de até 0,2 TON, além da taxa de rede, para concluir a transação. Qualquer valor não utilizado será reembolsado. + Para prosseguir com esta operação, é necessário um saldo de 0,2 TON, além da taxa de rede. Por favor, recarregue seu saldo. + Reserva TON necessária + Essa ação encerrará outras posições ou as converterá para o status de saque, de acordo com as regras da rede. + Status das posições + Desbloqueie seu dinheiro para retirá-lo do processo de staking. O desbloqueio leva... %s. + Seus fundos estarão disponíveis para uso após o período de desbloqueio de 21 dias. A recompensa será retirada juntamente com os fundos que você retirou do staking. + Seus fundos estarão disponíveis para uso após o %s período de desvinculação. + Você já pode sacar seus fundos, eles estarão disponíveis para uso imediatamente. + Ao fazer staking na rede Tron com um novo validador, todos os fundos previamente em staking serão transferidos automaticamente para esse validador. + Preparando + Pronto para retirar + Rebond + Repetir + Recompensas de reinvestimento + Revogar + Revote + Auto + Manual + Por bloco + Diário + Cada %s + Todos os dias + Cada %s dias + Cada + Por época + Por Era + Por hora + Mensal + Semanal + Recompensas + As recompensas na Solana são adicionadas automaticamente ao seu saldo de staking e não podem ser exibidas separadamente. + Stake bloqueada + Aposte mais + Ao fazer apostas %1$s, todo o seu %2$s O saldo é colocado em staking. Qualquer valor adicional %2$s Os depósitos que você fizer em sua carteira Tangem também serão automaticamente contabilizados em staking. + valor de staking + Você aposta %1$s e receberá sua recompensa. %2$s + Toque para desbloquear + Toque para desbloquear ou votar + Toque para retirar + Stake %s + Desvincule %s + A transação está sendo processada! A validação está em andamento na blockchain. Isso pode levar alguns minutos. + Desvinculação + Desbloquear + Desbloqueando + O valor a ser retirado do staking deve ser de pelo menos %s + O valor excede o saldo de stake + Sem staking + Unstaking + Retirar ativos de staking %s + Validador + Validadores + Parceiro estratégico + Voto + Voto + Retirar + Suas apostasSeus stakes + Armazene seus criptoativos com segurança, mantendo as chaves privadas dentro do seu cartão ou anel. + Carteira de hardware revolucionária + Adicione até 3 cartões ou anéis a uma carteira. + Backup ultrasseguro + Uma carteira de hardware para seus Bitcoins, Ethereums e muitas outras criptomoedas simultaneamente — tudo em um único cartão ou anel. + Milhares de moedas + Use em qualquer lugar, a qualquer hora. Sem fios nem baterias. Basta encostar o cartão ou ligar o telefone quando precisar das suas criptomoedas. + A carteira para todos + Conheça Tangem + Mais de 100 integrações de serviços descentralizados estão disponíveis. + Compatível com Web 3.0 + Uma transação de entrada de pelo menos %1$s é necessário prosseguir + Fundos insuficientes + Ao aprovar, você permite que o contrato inteligente utilize seus tokens em transações futuras. + Taxa fixa + A rede cobrará uma taxa de aprovação de token para verificar se você está autorizando o uso do seu token para a troca. + Troque mais tokens com melhores taxas diretamente na sua carteira. + Novo provedor de swaps disponível! + Procurando algo diferente?\n Experimente pesquisar ou explore outra criptomoeda! + Pesquise qualquer token, mesmo que ele ainda não esteja na sua lista. + Use a busca para encontrar o que você precisa. + Sinta-se seguro com o suporte disponível 24 horas por dia, 7 dias por semana, para ajudá-lo com qualquer problema. + Sempre aqui + Diversos provedores confiáveis ​​em um só lugar — troque qualquer ativo facilmente em sua carteira. + Troque conosco + Sem erros, sem perdas de posse, sem pontos cegos — sua transação está sempre protegida. + Defesa Impenetrável + Maximize o valor do seu investimento com tarifas provenientes de uma ampla rede de fornecedores confiáveis, escolhendo sempre a melhor opção. + Tarifas imbatíveis + Sem complicações e intuitivo, permitindo que você troque tokens com apenas alguns toques + Simplesmente conveniente + Trocar através do provedor + Seus ativos + O valor inclui:\n• taxa do provedor de serviços\n• taxa de rede para envio %s da central de distribuição de volta para o endereço do usuário. + O valor inclui:\n• taxa do provedor de serviços\n• taxa de rede para envio %1$s da central de câmbio de volta para o endereço do usuário. \n\nO deslizamento do provedor depende de %2$s + O valor inclui a taxa do prestador de serviços. + O valor inclui a taxa do prestador de serviços. A margem de atraso do prestador é de até %s + Informação + Todas as exchanges descentralizadas exigem aprovações para impedir que contratos inteligentes acessem sua carteira sem sua permissão. Por definição, os contratos inteligentes não podem acessar seus tokens a menos que você os aprove. Ao \"desbloquear\" seus tokens, você autoriza o contrato inteligente 1-inch a gastá-los. Os mineradores da rede recebem uma taxa de gás (paga por você) para registrar essa ação no blockchain. Você pode trocar seus tokens após conceder a aprovação. + Aprovar + Erro na estimativa de custos. Por favor, envie seu feedback para o suporte. + Você troca + Trocar essa quantidade de tokens selecionados causará um impacto significativo no preço e reduzirá seu resultado. + Alto impacto nos preços + Fundos insuficientes + Conceder permissão + Trocar + Trocar... + Você recebe + Escolha o token + não disponível + Teremos todo o prazer em receber seu feedback. + O Tangem Pay agora está em versão beta. + Cartão bloqueado + Pagamento com cartão + Depósito + Disputa + Explorar transação + Taxas de serviço + Taxa + Proteja seu dinheiro. Você pode desbloqueá-lo a qualquer momento. + Congelar o seu cartão? + Não foi possível bloquear o cartão. Tente novamente mais tarde. + Congelar + Seu cartão está bloqueado. + Obtenha ajuda + Razão: %s + %s · %s + MCC %s + Outro + Não é possível usar em dispositivos com root. + Concluído + Recusado + Pendente + Revertido + Termos, taxas e limites + Termos e Limites + O banco rejeitou esta solicitação de transação. + Essa taxa destina-se a cobrir os custos de processamento da sua transferência. + A transação foi parcial ou totalmente revertida pelo comerciante. + Continue usando seu dinheiro. Você pode congelar a qualquer momento. + Descongelar seu cartão? + Não foi possível desbloquear o cartão. Tente novamente mais tarde. + Seu cartão foi desbloqueado. + Retirada + Não é possível usar em dispositivos com root. + Ocultar KYC da tela principal + Adicionar fundos + Opções de recarga + Adicionar ao Google Wallet + Número do cartão + Alterar PIN + O cartão está totalmente pronto para pagamentos. + Código PIN criado + CVC + Não foi possível carregar os dados. Tente novamente mais tarde. + Termo + Congelar Cartão + Ocultar detalhes + Esconder + Abra a Carteira do Google + Configure o Tangem Pay em poucos toques e comece a pagar com o Google Pay. + Configure o Tangem Pay em poucos toques e comece a pagar com o Apple Pay. + Adicione seu cartão ao Google Pay + Adicione seu cartão ao Apple Pay + Abra a Carteira do Google + Toque no botão “+” no canto superior direito. + Abra a Carteira da Apple + Toque em “Adicionar um cartão” + Toque em “Cartão de Débito ou Crédito” + Insira os dados do cartão manualmente. + Verifique o cartão usando o código OTP enviado para o seu dispositivo. + Tudo pronto! Seu cartão está pronto para uso. + Adicionar cartão ao Google Pay + Adicionar cartão ao Apple Pay + Código PIN + Compartilhe seu endereço ou mostre o código QR. + Problemas técnicos detectados. Tente novamente mais tarde ou entre em contato com o suporte. + Receber indisponível agora + Revelar + Mostrar detalhes + Troque qualquer ativo da sua carteira por um cartão. + Detalhes do cartão + Descongelar cartão + Volte ao aplicativo se você se esquecer. + Seu código PIN + Retirar + Retirada indisponível agora + Você não pode iniciar uma troca ou um novo saque até que o atual seja concluído. + Retirada em andamento + Alterar código PIN + Volte ao aplicativo se você se esquecer. + Entendo que perderei completamente o acesso ao meu cartão Tangem Pay e a todos os fundos nele contidos, sem possibilidade de recuperação. + Falha na emissão do cartão + Ocorreu um erro técnico. Tente novamente clicando no botão abaixo. + Ocorreu um erro técnico. Por favor, entre em contato com o suporte. + Obtenha seu cartão virtual Visa Tangem grátis. + Obtenha o Tangem Pay + Acesse o Suporte + Geralmente leva até 15 minutos. + Configurando seu cartão Tangem + Emissão do seu cartão + O cartão geralmente é emitido automaticamente em até 5 minutos. Em casos raros, se for necessária uma análise manual, o processo pode levar até 48 horas. + Tangem Pay + Confirmar cancelamento + Tem certeza de que deseja interromper o processo KYC? Você pode retornar a ele a qualquer momento. + Não foi possível verificar seu perfil. Caso tenha alguma dúvida, entre em contato com o suporte. + Infelizmente, não foi possível verificar sua identidade. + KYC rejeitado + KYC em andamento + Ver status + O processo KYC para Tangem Pay está em andamento. + Os documentos geralmente são verificados automaticamente em até 5 minutos. Em casos raros, se for necessária uma revisão manual, esse processo pode levar até 48 horas. + Rejeitado + Ocultar bloco KYC + Desculpe, não foi possível verificar. + Seu perfil. + Obtenha seu cartão virtual Visa Tangem grátis. + Use USDC para pagamentos do dia a dia. + Obter cartão + Com cartão digital compatível com Apple Pay e Google Pay. + Gaste seus ativos em qualquer lugar. + Não há taxas adicionais para compras. + Pague exatamente o que você vê. + Uma conta de pagamento separada será criada sem divulgar seus endereços e bens. + Privacidade incomparável + Obtenha seu cartão Tangem Pay gratuito em minutos. + Conta de pagamento + A conta de pagamento não está sincronizada. + PIN inválido: evite sequências ou repetições. + Estamos resolvendo um problema técnico. Por favor, tente novamente mais tarde. + Serviço temporariamente indisponível + Não foi possível exibir os detalhes. No entanto, os pagamentos com cartão ainda estão funcionando. + Defina o código PIN. + Não sincronizado + Restaurar acesso + Use USDC para pagamentos do dia a dia. + O serviço Tangem Pay está temporariamente inacessível. + Tangem Pay + Clique no botão abaixo para restaurar o acesso. + O saldo do seu Polygon em USDC na blockchain é diferente do saldo do seu cartão e é atualizado em até 2 dias úteis após uma compra. Os fundos de compras reembolsadas não serão devolvidos ao seu saldo na blockchain nem estarão disponíveis para saque, mas permanecerão no saldo do seu cartão para compras futuras. + Observe + Seu código PIN + Esta é a minha carteira. + Saldos ocultos + Saldos apresentados + Desfazer + Esta operação está indisponível no momento. Tente novamente mais tarde. + Comprando %s Não é suportado pelos fornecedores atuais, mas estamos trabalhando para adicionar mais opções. + A ação não está disponível para tokens personalizados. + Você não tem fundos para vender. Adicione fundos à sua conta para poder vender seus ativos. + Você não tem fundos para enviar. Recarregue sua conta para poder enviar fundos. + Os dados estão sendo carregados. Isso pode levar alguns segundos. Tente novamente mais tarde. + Troca %s Não é suportado pelos fornecedores atuais, mas estamos trabalhando para adicionar mais opções. + O saldo exibido pode estar desatualizado devido ao armazenamento em cache. + Os fundos para venda estarão disponíveis assim que a(s) transação(ões) pendente(s) na plataforma forem concluídas. %s A rede está completa. + O envio de fundos estará disponível assim que a(s) transação(ões) pendente(s) estiver(em) na rede. %s está completo + Vendendo %s Não é suportado pelos fornecedores atuais, mas estamos trabalhando para adicionar mais opções. + O Staking %s não é suportado pelos provedores atuais, mas estamos trabalhando para adicionar mais opções. + A aprovação foi revogada. Seus fundos permanecem no modo Yield. Para realizar ações, acesse o modo Yield e conceda a permissão novamente. + Gerar XPUB + Ocultar + Você está prestes a ocultar este token da tela principal. Você pode adicioná-lo novamente a qualquer momento através da página de gerenciamento de tokens. + Ocultar %s + Ocultar token + O staking permite que você receba %1$s e receba recompensas todos os dias %2$s dias + Serviço de staking + %1$s token em %%imagem%% %2$s rede + Token em %%imagem%% %1$s rede + O %1$s (%2$sO token ) é a principal moeda da plataforma. %3$s rede e não pode ser ocultada enquanto você tiver outros tokens dessa rede na lista + Não foi possível ocultar %s + Mostrar código QR + Troque este token por outro em %1$s taxas de serviço a partir de fevereiro %2$s-%3$s. + Trocar com Changelly, %s tarifas + Troque agora + Tendência de mercado 🔥 + Não disponível para compra. + Não disponível para venda + Não disponível para troca a partir de %s + Indisponível para troca + contrato: %s + Você ainda não possui nenhuma transação. + Falha ao carregar o histórico de transações. Clique no botão \n para atualizar as informações. + Vários endereços + O histórico de transações ainda não é suportado nesta blockchain. Mas não se preocupe, estamos trabalhando nisso! Enquanto isso, você pode conferir no explorador. + Operação + para: %s + de: %s + para: %s + validador: %s + As notificações estão ativadas, mas não funcionarão até que você as permita nas configurações do seu dispositivo. + Notificações de transação + Mínimo %s + O valor mínimo da transação é %1$s. + As taxas da rede Tron para tokens populares podem ser mais altas. Fazer staking de TRX pode ajudar a reduzir os custos de transação. + Economize nas taxas da rede Tron + Tente novamente + Você escaneou o mesmo cartão. Para criar uma carteira gêmea, você precisa escanear o cartão com o número %d + Você escaneou o cartão errado. Por favor, tente outro. + Esta que você está segurando em suas mãos e a outra com o número %scartões podem ser usados ​​para retirar fundos desta carteira. + Uma carteira. Dois cartões. + Escanear Cartão #%s + Criando carteira + Escaneie o #%s carta gêmea + Preparando o cartão + Gêmeo Tangem + Essa ação é irreversível. Você não terá mais acesso à sua carteira antiga. + Toque no cartão gêmeo com o número %s e não remova até o final da operação. + Por favor, tente novamente mais tarde. Se o problema persistir, entre em contato com o suporte. + Algo deu errado! + Ocorreu um erro. Código do erro: %sPor favor, entre em contato com nosso suporte. + Usar %s ou escaneie um cartão/anel para acessar sua carteira. + Falha na conexão: Este aplicativo descentralizado (dApp) usa a versão 1.0 do Wallet Connect, que não é compatível. Certifique-se de que o dApp seja compatível com a versão 2.0 do Wallet Connect para que a conexão seja estabelecida com sucesso. + Faça upgrade para uma carteira de hardware. + Fique por dentro das últimas novidades e recursos. + Alertas em tempo real para transações, câmbio e atualizações críticas. + Alertas de transação + Receba notificações de transações recebidas. + Seja o primeiro a saber sobre novas promoções. + Acesso antecipado a novas funcionalidades e ofertas exclusivas. + Atualizações de notícias e recursos + Você gostaria de usar notificações push? + Ative as notificações push para receber alertas quando os fundos chegarem à sua carteira. + Não perca nenhuma transação. + Adicionar carteira + Se você excluir esta carteira sem fazer um backup, perderá permanentemente o acesso aos seus fundos. + Tem certeza de que deseja esquecer esta carteira? + Ocorreu um erro. Por favor, digitalize seu cartão ou toque para fazer login. + Esta carteira já foi salva, você pode adicionar outra. + A carteira com nome %s já existe + Nome da carteira + Renomear carteira + Desbloquear tudo + Desbloqueie tudo com %s + Verificado AML + Disponível + Bloqueado + Dívida + Limites + Outros (no-otp) + Transação única + Total + + disponiver para + disponivel para + + O saldo disponível representa os fundos efetivamente disponíveis, considerando as transações pendentes, os valores bloqueados e o saldo devedor para evitar descobertos. + Disponível até %1$s + Saldos e limites + Informações da conta de pagamento ausentes. Entre em contato com o suporte. + Não foi possível carregar as informações sobre o token. + As informações ainda estão sendo carregadas, aguarde. + É necessário estabelecer limites para controlar custos, melhorar a segurança e gerenciar riscos. Você pode gastar %1$s durante o período para pagamentos com cartão em lojas e %2$s para outras transações, como assinaturas ou dívidas. + O código de acesso será usado para gerenciar sua conta de pagamento e protegê-la contra acessos não autorizados. + Código de acesso + Ativação de conta + Por favor, selecione a carteira que você utilizou para iniciar o processo de registro para assinar a transação e criar sua conta na Blockchain. + Cancelar ativação + Tem certeza de que deseja sair? Você pode continuar mais tarde de onde parou. + Isso não vai demorar. Estamos configurando sua conta. + Isso não vai demorar. Estamos concluindo a ativação. + Deixando tudo pronto! + Outra carteira + Configure um código de 4 dígitos. Ele será usado para pagamentos. + Código PIN + Criar código PIN + O PIN não foi aceito. Tente novamente ou use um código diferente. + PIN inválido: evite sequências ou repetições. + Você está pronto para começar! + Prepare o cartão Tangem e toque para aprovar. + Prepare a carteira Tangem + Você poderá concluir sua conexão no site de terceiros e retornar ao aplicativo Tangem. + Ir para o site + Conexão da carteira + Escolha a carteira + Continuar ativação + Vamos continuar configurando sua conta. + Bem vindo de volta! + Iniciar ativação + Siga os passos para configurar sua conta. + Bem-vindo! + Valor do blockchain + Código da moeda + Data + Código de erro + Detalhes da transação + Código da categoria do comerciante + Cidade comercial + Código do país do comerciante + Nome do comerciante + ID da solicitação + Status + Transação + Valor da transação + Hash da transação + Solicitação de transação + Status da transação + Tipo + Contestar esta transação + Desbloquear + Escaneie seu cartão para desbloquear o acesso. + Desbloqueio necessário + Escolha o seu tipo de carteira + Escaneie seu cartão ou anel Tangem para restaurá-lo ou importá-lo de outra carteira. + Criar carteira de hardware + Deseja comprar uma carteira Tangem? + Frase-semente de importação + Restaure sua carteira no seu celular ou importe de outro aplicativo — conveniente, mas menos seguro do que um cartão Tangem. + O que escolher? + A blockchain está inacessível. Tente novamente mais tarde. + Escanear Cartão ou Anel + Esta carteira já foi ativada anteriormente. Se não foi você quem a ativou, entre em contato com o suporte. \n \n nunca vende carteiras com códigos de acesso pré-gerados. + Solicitação para assinar uma mensagem.\n\n%s + Aplicativo Dapp %1$s, solicitando que \n assine a transação BNB.\n\n%2$s + Ordem de negociação para %1$s\n: %2$s\na receber: %3$s\nValor a pagar: %4$s + Detalhes da transação: \n De: %1$s\nPara: %2$s\nValor: %3$s + A área de transferência contém o código WalletConnect. Use o valor copiado ou digitalize o código QR. + Solicitação para criar transação para %1$s\n%2$s\n\nValor: %3$s\nTaxa \n : %4$s\nTotal: %5$s\nSaldo: %6$s + Não foi possível enviar a transação. Fundos insuficientes. + Não foi possível estabelecer a sessão WalletConnect. Por favor, tente novamente mais tarde. + Nem todos os tokens foram adicionados à sua lista. Adicione-os primeiro e tente novamente. Tokens ausentes:\n + Falha ao assinar a mensagem. \n Por favor, tente novamente. + Falha ao estabelecer a sessão WalletConnect: erro de tempo limite. Por favor, tente novamente mais tarde. + A solicitação de sessão contém blockchains não suportadas para conexão WalletConnect. Blockchains não suportadas:\n + Não foi possível estabelecer conexão com este Dapp devido à sua implementação técnica. + Ocorreu um erro desconhecido. Mensagem de erro: %sSe o problema persistir, entre em contato com nosso suporte. + Cartão ou Anel incorreto selecionado no aplicativo Tangem + Falha ao criar transação a partir dos dados do Dapp. Código: %s + Ocorreu um erro desconhecido. Código do erro: %dSe o problema persistir, entre em contato com nosso suporte. + Transação em várias partes + Para que sua transação seja processada com sucesso, ela será dividida em várias partes. Você precisará aproximar seu cartão várias vezes para concluí-la. + Nenhuma sessão WalletConnect aberta + Ooops. Não há sessões. + Falha ao emparelhar a sessão WalletConnect: %1$s + Colar da área de transferência + Mensagem para %1$s:\n%2$s + Solicitação para iniciar uma sessão para\n%1$s\n\nREDE: %2$s\n\nURL: %3$s + A operação não pôde ser concluída. \n \n Você já estabeleceu uma sessão WalletConnect com esses parâmetros. + Escaneie o novo código + Este cartão não pode ser usado para estabelecer uma sessão WalletConnect. + Esta rede não é compatível. Selecione outra rede. + Selecione a rede + A transação está sendo processada. Por favor, aproxime seu cartão várias vezes para concluí-la. + Transação em andamento + Sessões WalletConnect + Conectar-se a dApps + WalletConnect + A conexão pode levar alguns segundos. + Crie uma carteira Tangem + De %s + Adquira a Tangem Wallet — um dispositivo físico que armazena sua chave privada de forma segura, mesmo offline. + Carteira de Hardware + Crie uma carteira segura no seu celular em segundos. + Carteira Móvel + O que escolher + Já utiliza uma carteira Tangem? + Escaneie agora + Escolha um método de configuração de carteira + Deseja comprar uma carteira Tangem? + Comprar agora + Recupere sua carteira existente por meio do backup do Google Drive. + Importar do Google Drive + Adicionar carteira existente + Dispositivos físicos que armazenam sua chave privada de forma segura offline. + Escaneie uma carteira Tangem + Importe uma carteira existente com sua frase de recuperação. + Importar carteira + Digite a frase de recuperação + Você importou sua carteira com sucesso. + Importar carteira + Importação concluída + Importar carteira + %s Preço de mercado + últimas 24 horas + %s rede + O endereço foi copiado para a área de transferência. + Sem conexão com a internet + Adquira já com 10% desligado + Acesse mais de 13.000 criptomoedas. Compre, venda, troque e faça staking com um único toque. \n Vincule até três cartões para backup. + Descubra a carteira Tangem + Este código de acesso protege sua carteira e é usado para fazer login e assinar transações. + Definir/Alterar código de acesso + Alterar código de acesso + Receba notificações push para transações recebidas na sua carteira. + As notificações push podem não estar funcionando corretamente em dispositivos Huawei. Estamos trabalhando ativamente em uma solução e lançaremos uma correção em uma atualização futura. Agradecemos a sua compreensão! + Notificações de transação + Definir código de acesso + Configurações da carteira + Tangem + Usar %s ou escaneie um cartão/anel para desbloquear o acesso à sua carteira. + O processo de concessão de licenças está em andamento e será concluído em breve. + Aprovação em andamento + A ativação não foi concluída com sucesso. Isso pode ser devido a um problema com a tecnologia NFC ou a uma aproximação incorreta. Entre em contato com nossa equipe de suporte para obter ajuda. + Erro de ativação + Em 3 de dezembro de 2024, a rede BEP-2 foi desativada por decisão dos desenvolvedores e deixou de receber suporte. + A cadeia de beacons BNB foi desativada. + Por favor, deposite algum %1$s para cobrir a taxa de rede + Fundos insuficientes para cobrir a taxa de rede. + Poderia ser melhor + Gostei + Ok, entendi! + Muito legal! + Atualizar + Iniciar migração + Cópia + Para manter o acesso aos seus fundos, inicie a migração de acordo com as diretrizes oficiais da Clore. + A assinatura de mensagens não é suportada nesta rede. + Não foi possível assinar a mensagem. Tente novamente. + De acordo com a documentação oficial da Clore, todas as moedas recebidas antes de 21 de dezembro serão migradas para a Clore (token ERC-20); as moedas recebidas após essa data não serão. Uma solução para a transferência está a caminho — fique atento. + Mensagem + Portal de Reclamações Aberto + Para continuar usando seus tokens Clore, você deve concluir a migração de tokens de acordo com as informações no Portal de Reivindicações. + Migração de Rede Clore + Assinar + Assinatura + Migração de Rede Clore + Você está atualmente no modo de demonstração. + Modo de demonstração ativo + O cartão que você escaneou é um cartão de desenvolvedor. Não o utilize para criar sua carteira. + Não destinado a usuários! + %1$s A rede exige um Depósito Existencial. Se sua conta ficar abaixo de %2$s, será desativado e quaisquer fundos restantes serão destruídos. + A rede exige depósito existencial. + A opção de troca estará disponível após o %s transação concluída + Você tem uma transação ativa. + A aprovação da troca está em andamento e será concluída em breve. + Aprovação em andamento + O valor mínimo de troca é %1$sCertifique-se de que o saldo restante após a troca não seja inferior a %2$s. + Você não possui nenhum token em seu portfólio que %s Pode ser trocado. Adicione outro token para habilitar a troca. + Nenhum token compatível adicionado + Para efetuar uma transação, você precisa depositar algum valor. %1$s %2$s + Não foi possível cobrir %s taxa + O valor a receber deve ser de pelo menos %s + Isso pode ocorrer porque o provedor não consegue, no momento, realizar a troca do par selecionado. Aguarde um momento e tente novamente. (Código) %s) + O par selecionado está temporariamente indisponível. + Alguns fornecedores não são autorizados pela Autoridade de Conduta Financeira do Reino Unido. Você deve evitar negociar com eles. + Lista de advertências da FCA + Serviço temporariamente indisponível + A quantidade de tokens a serem trocados não deve exceder %s + O valor a ser trocado deve ser de pelo menos %s + A troca não está disponível para este par. Selecione um token diferente e tente novamente. + Par de troca não suportado + Por favor, altere o valor para troca. + Este cartão pode ser uma amostra de produção ou uma falsificação. + A verificação de autenticidade falhou. + Associado + Este token precisa ser associado à sua conta Hedera antes que você possa recebê-lo. Taxa de associação ~%1$s %2$s + Este token precisa ser associado à sua conta Hedera antes que você possa recebê-lo. + Associe seu token + Não é suficiente %sRecarregue sua conta Hedera para associar este token. + Tem certeza de que deseja cancelar a transação? Você não poderá tentar realizá-la novamente. + Sua transação com um valor de %1$s %2$s Não foi concluído. Você pode tentar novamente para concluí-lo. + Você tem uma transação pendente. + A última atualização foi %s + Apenas %s Assinaturas são deixadas neste cartão. Você deve sacar todos os seus fundos. + Baixa contagem de assinaturas + Tokens em redes diferentes podem ter endereços diferentes. Verifique se o seu endereço corresponde à rede ao transferir fundos. + O MATIC está sendo migrado para o POL. No entanto, não há prazo definido e o MATIC ainda não foi descontinuado. Você pode continuar usando o token MATIC com segurança ou trocá-lo pelo POL. + Migração de MATIC para POL + + Use seu Cartão ou Anel para obter o endereço de uma rede. + Use seu Cartão ou Anel para obter endereços de rede. + + Alguns endereços estão faltando. + A rede está inacessível no momento. Tente novamente mais tarde. + A rede está inacessível. + Recarregue sua carteira + Sua carteira ainda não possui backup. Faça um backup agora para proteger seus ativos. + Backup ausente + Este cartão já foi usado anteriormente para transações. Se o recebeu de uma fonte não confiável, considere retirar todos os fundos. Se o cartão for seu, nenhuma ação é necessária. + O cartão já registrou transações. + Sua avaliação nos motiva a aprimorar ainda mais a Tangem Wallet. + Gostando de Tangem? + Você precisa associar seu token antes de receber tokens. + Você precisa abrir uma conta Trustline para o seu token antes de recebê-lo. + Taxa de aluguel de rede necessária + Ação necessária + Você entrou em contato com o suporte pelo aplicativo em até 7 dias após a criação da sua carteira? Se sim, ou se não tiver certeza, clique em \"Sim\" e siga as instruções. + Obrigado! Tudo pronto! Nenhuma ação adicional é necessária. + Você será redirecionado para o site oficial da Tangem. Leia e siga as instruções ali presentes. + Você já entrou em contato diretamente com a equipe de suporte da Tangem por meio deste aplicativo? + Atualização de segurança obrigatória + %1$s é uma vantagem no %2$s rede. Para criar uma %3$s Para realizar a transação, você precisa depositar algum valor. %4$s (%5$s) para cobrir a taxa de rede. + Insuficiente %1$s para cobrir a taxa de rede + A rede Solana está congestionada. Se a sua transação não for processada em 2 minutos, por favor, repita-a. + Alerta da Rede Solana + A rede Solana cobra um aluguel de %1$s A cada 2 dias. Contas que não conseguem pagar o aluguel são excluídas da rede. Deposite em sua conta mais do que %2$s para usá-lo gratuitamente. + Deslize para baixo para atualizar ou tente novamente mais tarde. + Algumas redes estão inacessíveis. + Alguns saldos de tokens não puderam ser atualizados. + Não é suficiente %sRecarregue sua conta XLM para abrir uma conta Trustline. + Este é um cartão de teste (Testnet). Ele não pode processar transações e deve ser usado apenas para fins de teste e desenvolvimento. + Apenas para fins de teste + O saldo pode estar desatualizado. Atualize a página. + Não é suficiente %1$sRecarregue seu %2$s conta para associar este token + Ativar Trustline + É necessário habilitar uma Trustline para receber este token. A rede requer um %1$s %2$s reserva. + Linha de confiança obrigatória + A rede necessária %s Não foi adicionado ao seu portfólio. Adicione-o primeiro e depois prossiga com a conexão. + Adicionar rede ao portfólio + Domínio malicioso + Domínio desconhecido + Conecte-se mesmo assim + Erro de tempo limite. Por favor, tente novamente mais tarde. + Falha ao estabelecer conexão com a carteira (WalletConnect). + Este domínio não pôde ser verificado. Analise cuidadosamente a solicitação antes de aprová-la. + Para continuar, reconecte sua sessão do dApp à rede necessária. %s. + Rede não conectada + Verifique sua conexão de rede. + Tempo limite da solicitação + Por favor, volte ao seu navegador e reconecte-se através do WalletConnect. + A sessão Wallet Connect foi desconectada. + Assine mesmo assim + Código de erro: %sSe o problema persistir, entre em contato com nosso suporte. + Se o problema persistir, entre em contato com nosso suporte. + Ocorreu um erro desconhecido. + A carteira Tangem atualmente não oferece suporte. %s. + dApp não suportado + Código de erro: 8005. Se o problema persistir, entre em contato com nosso suporte. + Ocorreu um erro desconhecido. + Esta rede %s Não é compatível com a Tangem Wallet e não pode ser conectado. + Rede não suportada + Atualmente, a Tangem não oferece suporte a uma rede necessária. %s. + Redes não suportadas + Este domínio passou por verificações e é considerado seguro, confiável e livre de ameaças conhecidas ou atividades suspeitas. + Domínio verificado + Cartão ou Anel incorreto selecionado no aplicativo. + Temos algum tipo de problema. + Todos os dApps desconectados + Permitir gastar + Ao aprovar, você permite que o dApp ou contrato inteligente use tokens em transações futuras. + Endereço + Conectar + Carregando + Rede + Redes + Ilimitado + Carteira + Aplicativo Conectado + Redes conectadas + Conectado a %1$s + Veja o saldo e a atividade da sua carteira. + Assinar transações sem o seu aviso prévio. + Solicitar aprovação para transações + Não será possível + Gostaria de + Solicitação de conexão + Conexões + Conteúdo + Copiar dados + alfândega + dApp desconectado + Desconecte tudo + Todas as sessões de dApps serão desconectadas. Sua carteira não estará mais vinculada a nenhum dApp. + Desconectar todos os dApps + Tente emparelhar novamente com um novo URI. + Domínio dApp inválido + %s Não especifica nenhuma blockchain — nem obrigatória nem opcional. \n Certifique-se de ter usado o URI correto. + Sem redes + Por favor, gere um novo URI e tente conectar novamente. + A proposta de conexão expirou. + Alterações estimadas na carteira + Não foi possível simular a transação. Prossiga com cautela. + A estimativa não é suportada para %s + Sugerido por %s + Recarregue seu saldo para cobrir a taxa de rede. + Insuficiente %1$s + Transação maliciosa + Adicione o %s Conecte sua carteira à sua rede para esta carteira. + A carteira não requer redes. + Nova conexão + Conecte sua carteira a diferentes dApps + Sem sessões + Nenhuma alteração detectada na carteira. + Foram detectados riscos potenciais ou comportamentos maliciosos. Conectar ou assinar transações pode resultar em perda de fundos. + Risco de segurança conhecido + Abra o aplicativo Web3 e selecione a opção WalletConnect. + Solicitação de + Assine mesmo assim + Tipo de assinatura + É necessária pelo menos uma rede para a conexão do dApp. + Especifique as redes selecionadas + Assinatura concluída com sucesso + Para + Solicitação de transação + Solicitação de transação + Quantidade ilimitada + Garanta que cada tentativa de emparelhamento utilize um URI novo e exclusivo. + URI já utilizada + WalletConnect + Transação suspeita + Já possui a carteira Tangem? + Milhares de ativos + carteira de hardware de alta qualidade + Entrega rápida + Comece com um toque + Sem complicações e seguro + Sem frase-semente + Fácil de usar + Crie uma carteira de hardware com a Tangem. Fina como um cartão bancário, segura como um cofre de banco. + Crie ou importe uma carteira de software. + Crie ou importe uma carteira de software para o seu celular. + Comece com a carteira digital + Outros métodos + Use uma carteira de hardware Tangem. + Saiba mais e compre + Descartar + Seu backup foi interrompido. Deseja retomá-lo? + Sim, retomar + Descartar + Se você descartar o backup agora, terá que restaurar os dispositivos para as configurações de fábrica para começar tudo de novo. + Retomar backup + Esta é uma ação irreversível. + Faça login com %s + Escanear Cartão ou Anel + Usar %s ou escaneie um cartão ou anel para acessar o aplicativo. + Bem vindo de volta! + Não, envie tudo + Reduzir por %s XTZ + Para evitar pagar uma comissão maior na próxima vez que recarregar sua carteira, reduza o valor em %s XTZ + Quando o Modo de Rendimento estiver ativo, todas as recargas futuras para este endereço serão fornecidas à Aave. Você ainda poderá gerenciar seus fundos livremente. + Seu %s é fornecido à Aave + Fornecimento %1$s %2$s para Aave + Aprovar + A aprovação do seu token foi revogada. Conceda-o novamente para retomar a funcionalidade do serviço. + Aprovação necessária + A taxa será deduzida e seus ativos serão devolvidos. + Para continuar gerando rendimento, é necessária aprovação. + Confirmar aprovação + Seus fundos estão atualmente vinculados ao protocolo Aave, mas você pode gerenciá-los a qualquer momento. + Seu %s é fornecido à Aave + Não foi possível carregar o gráfico... + Fornecimento %1$s %2$s para Aave. + Desativar o modo de rendimento + APY %1$s%% + Disponível + APY atual + Ao recarregar para empréstimo, será cobrada uma taxa de rede não superior a %1$s será deduzido do saldo. + A taxa de rede está atualmente muito alta para efetuar empréstimos. Os fundos serão disponibilizados assim que a taxa cair para %1$s ou abaixo. + Meus fundos + Seu %1$s já foi implantado no Aave e está gerando rendimento. Você detém %2$s Os tokens representam seu saldo e acumulam rendimento automaticamente. Ao adicionar fundos, eles são enviados para a Aave para gerar mais rendimento, após a dedução das taxas. + Modo de rendimento + Rendimento total + Transferências para Aave + Explore Aave + Esta é a taxa de fornecimento atual em %sO custo real será exibido na aba de ativação. + Taxa atual + Todo o futuro %s Os créditos serão fornecidos automaticamente à Aave, após a dedução da taxa de transação. + Uma taxa de rede aproximada de %1$s (%2$s) será deduzido de cada recarga futura e não excederá o seu %3$s (%4$s) limite. + Se as taxas de rede ultrapassarem a taxa máxima, a transação não será concluída até que elas diminuam. Você poderá alterar esse limite posteriormente. + Taxa máxima + O valor mínimo é calculado com base na tarifa de rede atual, garantindo que não ultrapasse 4.%% do valor da recarga, que é igual ao mínimo %1$s (%2$s). + recarga mínima + Política de taxas de recarga + Tangem também leva 15% Taxa de serviço sobre o rendimento gerado. + Seus fundos serão transferidos automaticamente para a Aave assim que as tarifas de rede diminuírem ou seu saldo atingir o valor mínimo exigido. + As taxas estão mais altas do que o normal devido à alta atividade do mercado. Você pode prosseguir agora ou verificar novamente mais tarde, quando as taxas estiverem mais baixas. + Altas taxas de rede + Retornos históricos + Habilitar %1$s%% APY sobre o seu saldo + A aprovação do seu token no Modo Yield foi revogada. Abra o token para conceder permissão novamente. + É necessária a aprovação do token. + Verifique sua conexão de rede. + Informações sobre tarifas de rede indisponíveis + Cada recarga será fornecida automaticamente à Aave. + Todos %1$s Os dados da sua conta serão fornecidos automaticamente à Aave. + Fornecimento automático para Aave + Envie, troque ou venda seus fundos instantaneamente, quando quiser. + Sem bloqueios + Como funciona? + Aave é um protocolo on-chain que oferece mercados de liquidez sem custódia, permitindo que os usuários acumulem rendimentos a taxas variáveis. + Descentralizado e autossustentável + Ao utilizar este serviço, você concorda com os termos do provedor.%1$s e %2$s + Conecte-se ao Aave + Habilitar %1$s%% APY\não seu saldo + Aave %1$s%% • Taxa de juros variável + Taxa de juros variável + Aave + Média %s + Retornos do ano passado + A taxa de juros atual é sempre variável e calculada automaticamente pelo contrato inteligente on-chain da Aave, com base na oferta e demanda em tempo real. + Desenvolvido por + A taxa de juros é variável. + Ao fazer um depósito, seus fundos serão automaticamente enviados para a Aave para começar a gerar rendimento. %s Será deduzido o valor para cobrir a taxa de transação. + Ativos de fornecimento + Seu %s Serão fornecidos à Aave sem fechaduras e permanecerão totalmente acessíveis. + Consulte a política de taxas de recarga. + Suas próximas recargas serão enviadas automaticamente para a Aave. + Todas as suas futuras chegadas %1$s Os depósitos serão enviados automaticamente para a Aave. + Ativo + Em pausa + Desativação do modo Yield + Desativar esta opção fará com que seus ativos sejam retirados da Aave e convertidos de volta para... %s na sua carteira e interrompa o acúmulo de rendimento. + Uma taxa de rede é cobrada pela blockchain quando você sai do Modo Yield. + Desativar o modo Yield + Fornecimento + Fornecimento APY + APY + Os juros acumulam-se automaticamente. + Os juros acumulam-se automaticamente. + Modo de rendimento + Ativação do modo de rendimento + Modo de rendimento + Implementação do contrato do modo de rendimento + Modo Yield ativado + %1$s fornecido à Aave + Modo de rendimento desativado + %1$s retirado de Aave + Modo de rendimento inicializado + Modo de rendimento reativado + Fornecimento para Aave + %1$s fornecido à Aave + Retirar do Aave + Automático + Adicione alguns %1$s %2$s para cobrir a taxa de rede das transações. + Não foi possível cobrir %s taxa + O Modo Rendimento não está disponível no momento. Tente novamente mais tarde. + Modo de rendimento indisponível + Não foi possível carregar o gráfico... + diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 350f3c2c43..a624ed8ccd 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -223,6 +223,7 @@ Добавить Добавить в портфель Добавить токен + Добавьте токены Добавлен Адрес Все @@ -408,6 +409,7 @@ Я понял Я понимаю, продолжить Произошла ошибка. Пожалуйста, попробуйте снова. + Разблокировать Недоступно Завершить стейкинг Из-за ограничений %1$s в одну транзакцию может поместиться только %2$d UTXO. Это означает, что вы можете отправить только %3$s или меньше. Вам нужно уменьшить сумму. @@ -489,8 +491,9 @@ Фильтровать по Мои сети Сети - Часто используемые + Популярные Нет результата + Доступные активы Привет, команда поддержки, у меня возникла ошибка с кодом: %s Ошибка WalletConnect Вы использовали карту или кольцо от другого кошелька. Приложите карту или кольцо, связанную с этим кошельком. @@ -733,18 +736,18 @@ Удалить Например Bitcoin Ваш портфель был обновлен - Выбранный токен не доступен в кошельке на данный момент. Но не переживайте, вы можете выразить свой интерес проголосовав за его добавление. + Выбранный токен недоступен в кошельке на данный момент. Но не переживайте, вы можете выразить свой интерес проголосовав за его добавление. Голосовать Кошелёк не поддерживает более одной сети О монете Чтобы купить, обменять или получить данный токен, вам нужно добавить его к себе в портфель Этот актив в настоящее время не поддерживается в кошельке - Этот токен не доступен для данного кошелька + Этот токен недоступен для данного кошелька Добавить APY %s Мой портфель Рынок - Зарабатывай с Tangem + Доход с Tangem Чтобы создать адреса для выбранных сетей, отсканируйте вашу карту или кольцо Tangem кошелька Потяните вверх или коснитесь поисковой строки, чтобы добавить токен Данные раздела получены из следующих сетей: %s @@ -843,6 +846,7 @@ Объем торгов (24ч) Общая сумма криптовалюты, которая была продана за последние 24 часа, показывающая уровень активности и ликвидности на рынке. Объем торгов (24ч) + %s в сумме Объем Потяните вверх или коснитесь поисковой строки, чтобы добавить токены напрямую из рынка Добавить токены @@ -1499,7 +1503,7 @@ Обмен… Вы получите Выберите токен - не доступен + недоступен Будем рады вашей обратной связи Tangem Pay в режиме beta Карта заморожена diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index 297d8310dc..14557017ad 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -223,6 +223,7 @@ Додати Додати у портфель Додати токен + Додайте токени Додано Адреса Усе diff --git a/core/res/src/main/res/values-zh-rCN/strings.xml b/core/res/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..be6b9c60c8 --- /dev/null +++ b/core/res/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,19 @@ + + + 添加代幣 + 沒有結果 + 要發送的代幣 + 解鎖 + 您的錢包已同步並準備就緒。\n缺少某些代幣? + 錢包導入成功 + 恢復%d% + + + + + 使用固定利率時,您在置換交易時收到的金額將被鎖定,這可以保護您免受交易過程中價格波動的影響。 + 固定利率 + 浮動利率意味著您最終收到的金額可能會根據您開始和完成置換之間的市場情況略有變化。 + 浮動利率 + 利率固定 + diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index b03f0df753..f29adfe6d1 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -217,6 +217,7 @@ Add Add to portfolio Add token + Add tokens Added Address All @@ -325,6 +326,7 @@ NFT No No address + No results Not Added Not available Not now @@ -383,6 +385,7 @@ To To %s Today + Token to send %d token %d tokens @@ -395,6 +398,7 @@ I understand I understand, continue There was an error. Please try again. + Unlock Unreachable Unstake Due to %1$s limitations only %2$d UTXOs can fit in a single transaction. This means you can only send %3$s or less. You need to reduce the amount. @@ -478,7 +482,7 @@ Networks Mostly used No results - Earn + Staking & Yield mode Hi support team, I\'ve encountered an error with code: %s WalletConnect error You have used a card or ring from another wallet. Tap the card or ring associated with this wallet @@ -688,6 +692,9 @@ Tap to scan Tap to sign Tap the card or ring + Your wallet is synced and ready.\nSome tokens missing? + Wallet successfully imported + Restoring %d% You have updated biometrics, scan your card or ring to enter Your balance should be higher than the fee value to make a transfer Not enough balance @@ -699,6 +706,7 @@ Mana level To begin tracking your crypto assets and transactions, add tokens Manage tokens + Scan QR code to send funds or connect to an app To access all the networks you need to scan the card Scan your card or ring Enjoy %1$s service fees on swaps via Changelly from February %2$s-%3$s @@ -733,9 +741,11 @@ APY %s My portfolio Market - Earn with Tangem + Staking & Yield mode To generate addresses for selected networks, you must scan your Tangem Wallet card or ring To add tokens pull this up or tap the search bar + Swipe up to explore the market + Find new hidden gems This section’s data is sourced from the following networks: %s Unable to load the data… No data @@ -798,6 +808,10 @@ Holders The change in the number of token holders within a specific timeframe Holders + D + M + W + Y Insights Links Liquidity @@ -825,9 +839,11 @@ Total supply The maximum number of coins or tokens that can ever exist for a particular cryptocurrency Total supply + 24h Trading volume (24h) The total amount of a cryptocurrency that has been traded within the last 24 hours, indicating the level of activity and liquidity in the market Trading volume (24h) + %s in total Volume Pull this up or tap the search bar to add tokens directly from the market Add tokens @@ -1038,7 +1054,7 @@ The purchase amount should be no more than %s The amount to buy must be at least %s No available providers for this currency - Quickest Processing + Quickest processing Pay with Payment method Available up to %s @@ -1088,6 +1104,10 @@ Settings You have not given access to your camera Camera access denied + Sorry, this QR code could not be recognized. + Unrecognized QR Code + This network isn\'t supported by any of your added tokens. Add a supported token to send crypto. + No supported tokens found No memo required %1$s (%2$s) on %3$s network %1$s on %2$s network @@ -1202,6 +1222,10 @@ Memo: %s Invalid Memo Network fee coverage + + %d token isn\'t compatible with this address + %d tokens aren\'t compatible with this address + Nonce Unique number for each transaction. Use it to resend or cancel a pending transaction. Enter nonce… @@ -1229,6 +1253,11 @@ Transaction limitation Optional Please align your QR code with the square to scan it. Ensure you scan %s network address. + When you use a fixed rate, the amount you receive is locked in at the time of the swap. This protects you from price changes during the transaction. + Fixed rate + A floating rate means the final amount you receive may change slightly based on market conditions between the time you start and complete the swap. + Floating rate + Rate is fixed Recent Recipient Not a valid address @@ -1272,6 +1301,7 @@ Recipient gets %s Are you sure you want to cancel the conversion? Your previous data will be cleared. Remove Conversion + Something went wrong. Try again. Send with swap Transaction sent Prepare to scan card or ring you want to set up. @@ -1438,8 +1468,8 @@ The network will charge a token approval fee to verify that you are authorizing the use of your token for the swap. Exchange more tokens at better rates directly in your wallet. New Swap Provider Available! - Looking for something else?\nTry searching or explore another crypto! - Search for any token, even if it’s not in your list yet. + Looking for something else?\nTry searching or explore another crypto! + Search for any token, even if it’s not in your list yet. Use search to find what you need Feel confident with round-the-clock support to help with any issues Always Here @@ -1509,6 +1539,7 @@ Hide KYC from main screen Add funds Top-up options + Add to Google Wallet Card Number Change PIN The card is fully ready for payments. From 10584c84a8be8be8d80ba41c2022a449a6622e7b Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 19 Mar 2026 15:13:46 +0400 Subject: [PATCH 3/6] Updated on 2026-08-14 --- .../tap/common/pushes/TangemPushNotificationService.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/common/pushes/TangemPushNotificationService.kt b/app/src/main/java/com/tangem/tap/common/pushes/TangemPushNotificationService.kt index 714a4acfd7..9965c9a2f2 100644 --- a/app/src/main/java/com/tangem/tap/common/pushes/TangemPushNotificationService.kt +++ b/app/src/main/java/com/tangem/tap/common/pushes/TangemPushNotificationService.kt @@ -33,7 +33,11 @@ internal class TangemPushNotificationService : FirebaseMessagingService() { super.onMessageReceived(message) if (customerIoFeatureToggles.isFeatureEnabled) { - CustomerIOFirebaseMessagingService.onMessageReceived(applicationContext, message) + CustomerIOFirebaseMessagingService.onMessageReceived( + context = applicationContext, + remoteMessage = message, + handleNotificationTrigger = false, + ) } val notification = message.notification ?: return From 096d1e40c9ab3d60c50eb5a3b8f7b97953964b1e Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 19 Mar 2026 18:24:41 +0500 Subject: [PATCH 4/6] Updated on 2026-08-14 --- .../api/pay/models/request/OrderRequest.kt | 11 +++-- .../pay/models/response/CustomerMeResponse.kt | 2 +- .../pay/DefaultTangemPayEligibilityManager.kt | 3 +- .../DefaultPaymentAccountStatusFetcher.kt | 7 +-- .../DefaultCustomerOrderRepository.kt | 1 + .../repository/DefaultOnboardingRepository.kt | 46 ++++++++++--------- .../com/tangem/domain/pay/model/OrderData.kt | 1 + .../pay/repository/OnboardingRepository.kt | 3 +- .../TangemPayMainScreenCustomerInfoUseCase.kt | 42 ++++++++++------- .../model/TangemPayOnboardingModel.kt | 14 +++++- .../TangemPayUpdateInfoStateTransformer.kt | 2 +- 11 files changed, 79 insertions(+), 53 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/request/OrderRequest.kt b/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/request/OrderRequest.kt index 73725d5782..b293b1e3aa 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/request/OrderRequest.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/request/OrderRequest.kt @@ -4,6 +4,11 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class OrderRequest( - @Json(name = "wallet_address") val walletAddress: String, -) \ No newline at end of file +data class OrderRequest(@Json(name = "data") val data: Data) { + @JsonClass(generateAdapter = true) + data class Data( + @Json(name = "customer_wallet_address") val customerWalletAddress: String, + @Json(name = "specification_name") val specificationName: String = "SP_000004", + @Json(name = "type") val type: String = "CARD_ISSUE_VIRTUAL_RAIN_KYC", + ) +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/CustomerMeResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/CustomerMeResponse.kt index 69405843f7..38e8982664 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/CustomerMeResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/CustomerMeResponse.kt @@ -73,7 +73,7 @@ data class CustomerMeResponse( @JsonClass(generateAdapter = true) data class PaymentAccount( @Json(name = "id") val id: String, - @Json(name = "address") val address: String, + @Json(name = "address") val address: String?, @Json(name = "customer_wallet_address") val customerWalletAddress: String, ) diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/DefaultTangemPayEligibilityManager.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/DefaultTangemPayEligibilityManager.kt index c3eb76035e..5394296772 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/DefaultTangemPayEligibilityManager.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/DefaultTangemPayEligibilityManager.kt @@ -92,8 +92,7 @@ internal class DefaultTangemPayEligibilityManager @Inject constructor( } private fun UserWallet.isCompatible(): Boolean = when (this) { - is UserWallet.Cold -> - scanResponse.card.firmwareVersion >= FirmwareVersion.HDWalletAvailable + is UserWallet.Cold -> scanResponse.card.firmwareVersion >= FirmwareVersion.HDWalletAvailable is UserWallet.Hot -> hotWalletId.authType != HotWalletId.AuthType.NoPassword } diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt index cdfbf0d9b4..fe1aa3f0bd 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt @@ -104,9 +104,9 @@ internal class DefaultPaymentAccountStatusFetcher @Inject constructor( ifRight = { customerInfo -> Timber.tag(TAG).i("proceedWithoutOrder data customerInfo $userWalletId") val status = customerInfo.mapToPaymentAccountStatus() - if (status is PaymentAccountStatus.IssuingCard && customerInfo.kycStatus == KycStatus.APPROVED) { - // If order id wasn't saved -> start order creation and get customer info + if (customerInfo.productInstance == null) { onboardingRepository.createOrder(userWalletId) + .onLeft { Timber.tag(TAG).e("createOrder failed: $it") } } status }, @@ -128,9 +128,6 @@ internal class DefaultPaymentAccountStatusFetcher @Inject constructor( -> PaymentAccountStatus.IssuingCard(source = StatusSource.ACTUAL) OrderStatus.CANCELED -> { - // If order was cancelled -> clear previous order from local storage and start order creation - onboardingRepository.clearOrderId(userWalletId) - onboardingRepository.createOrder(userWalletId) PaymentAccountStatus.Error.CardIssueFailed } OrderStatus.COMPLETED -> { diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultCustomerOrderRepository.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultCustomerOrderRepository.kt index 508627ca37..8cc392d6ed 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultCustomerOrderRepository.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultCustomerOrderRepository.kt @@ -27,6 +27,7 @@ internal class DefaultCustomerOrderRepository @Inject constructor( OrderResponse.Result.Status.CANCELED -> OrderStatus.CANCELED } OrderData( + customerId = response.result?.customerId.orEmpty(), status = status, withdrawTxHash = response.result?.data?.transactionHash?.ifEmpty { null }, ) diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt index b67a28e4e5..6977883f46 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt @@ -1,13 +1,14 @@ package com.tangem.data.pay.repository import arrow.core.Either -import arrow.core.raise.catch +import arrow.core.right import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.datasource.api.pay.TangemPayApi import com.tangem.datasource.api.pay.models.request.DeeplinkValidityRequest import com.tangem.datasource.api.pay.models.request.OrderRequest import com.tangem.datasource.api.pay.models.request.SetTangemPayEnabledRequest import com.tangem.datasource.api.pay.models.response.CustomerMeResponse +import com.tangem.datasource.api.pay.models.response.OrderResponse import com.tangem.datasource.local.visa.TangemPayCardFrozenStateStore import com.tangem.datasource.local.visa.TangemPayStorage import com.tangem.domain.common.wallets.UserWalletsListRepository @@ -23,14 +24,11 @@ import com.tangem.domain.tangempay.TangemPayAnalyticsEvents import com.tangem.domain.visa.error.VisaApiError import com.tangem.domain.visa.model.TangemPayCardFrozenState import com.tangem.utils.coroutines.CoroutineDispatcherProvider -import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import timber.log.Timber import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject private const val VALID_STATUS = "valid" -private const val TAG = "TangemPay: OnboardingRepository" @Suppress("LongParameterList") internal class DefaultOnboardingRepository @Inject constructor( @@ -109,25 +107,31 @@ internal class DefaultOnboardingRepository @Inject constructor( return lastFetchedCustomerInfoMap[userWalletId] } - override suspend fun createOrder(userWalletId: UserWalletId) = withContext(dispatcherProvider.io) { - launch { - catch( - block = { - val walletAddress = requestHelper.getCustomerWalletAddress(userWalletId) - val response = requestHelper.performRequest(userWalletId) { authHeader -> - tangemPayApi.createOrder(authHeader, body = OrderRequest(walletAddress)) - }.getOrNull() + override suspend fun createOrder(userWalletId: UserWalletId): Either = + withContext(dispatcherProvider.io) { + val existingOrderId = getOrderId(userWalletId) + if (existingOrderId != null) { + val orderStatus = requestHelper.performRequest(userWalletId) { authHeader -> + tangemPayApi.getOrder(authHeader, existingOrderId) + }.map { it.result?.status }.getOrNull() - val result = requireNotNull(response?.result) - val customerWalletAddress = requireNotNull(result.data.customerWalletAddress) - tangemPayStorage.storeOrderId(customerWalletAddress, result.id) - }, - catch = { - Timber.tag(TAG).e("createOrder: $it") - }, - ) + if (orderStatus == OrderResponse.Result.Status.NEW || + orderStatus == OrderResponse.Result.Status.PROCESSING + ) { + return@withContext existingOrderId.right() + } + } + + val walletAddress = requestHelper.getCustomerWalletAddress(userWalletId) + requestHelper.performRequest(userWalletId) { authHeader -> + val data = OrderRequest.Data(customerWalletAddress = walletAddress) + tangemPayApi.createOrder(authHeader, body = OrderRequest(data = data)) + }.map { response -> + val result = requireNotNull(response.result) + tangemPayStorage.storeOrderId(walletAddress, result.id) + result.id + } } - } private fun getUserWallet(userWalletId: UserWalletId): UserWallet { return userWalletsListRepository.userWallets.value?.firstOrNull { it.walletId == userWalletId } diff --git a/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/OrderData.kt b/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/OrderData.kt index 42b7001564..3fd07971ec 100644 --- a/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/OrderData.kt +++ b/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/OrderData.kt @@ -1,6 +1,7 @@ package com.tangem.domain.pay.model data class OrderData( + val customerId: String, val status: OrderStatus, val withdrawTxHash: String?, ) \ No newline at end of file diff --git a/domain/visa/src/main/kotlin/com/tangem/domain/pay/repository/OnboardingRepository.kt b/domain/visa/src/main/kotlin/com/tangem/domain/pay/repository/OnboardingRepository.kt index 52197ec817..f15d30b93a 100644 --- a/domain/visa/src/main/kotlin/com/tangem/domain/pay/repository/OnboardingRepository.kt +++ b/domain/visa/src/main/kotlin/com/tangem/domain/pay/repository/OnboardingRepository.kt @@ -5,7 +5,6 @@ import com.tangem.core.error.UniversalError import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.pay.model.CustomerInfo import com.tangem.domain.visa.error.VisaApiError -import kotlinx.coroutines.Job interface OnboardingRepository { @@ -17,7 +16,7 @@ interface OnboardingRepository { suspend fun getCustomerInfo(userWalletId: UserWalletId): Either - suspend fun createOrder(userWalletId: UserWalletId): Job + suspend fun createOrder(userWalletId: UserWalletId): Either suspend fun clearOrderId(userWalletId: UserWalletId) diff --git a/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt b/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt index 4116e2e4f4..7b403dd167 100644 --- a/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt +++ b/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt @@ -126,11 +126,13 @@ class TangemPayMainScreenCustomerInfoUseCase( } .map { customerInfo -> Timber.tag(TAG).i("customerInfo") - if (customerInfo.cardInfo == null && customerInfo.kycStatus == KycStatus.APPROVED) { - // If order id wasn't saved -> start order creation and get customer info + if (customerInfo.productInstance == null) { onboardingRepository.createOrder(userWalletId) + Timber.tag("ddk9499").d("TangemPayMainScreenCustomerInfoUseCase.proceedWithoutOrder: ") + MainScreenCustomerInfo(info = customerInfo, orderStatus = OrderStatus.NEW) + } else { + MainScreenCustomerInfo(info = customerInfo, orderStatus = OrderStatus.COMPLETED) } - MainScreenCustomerInfo(info = customerInfo, orderStatus = OrderStatus.UNKNOWN) } } @@ -145,27 +147,33 @@ class TangemPayMainScreenCustomerInfoUseCase( }, ifRight = { orderData -> when (orderData.status) { - // Kyc is passed and user waits for order creation -> no need to get customer info OrderStatus.NEW, OrderStatus.PROCESSING, - -> MainScreenCustomerInfo( - info = CustomerInfo( - customerId = null, - productInstance = null, - kycStatus = KycStatus.APPROVED, - cardInfo = null, - ), - orderStatus = orderData.status, - ).right() + -> { + onboardingRepository.getCustomerInfo(userWalletId = userWalletId) + .mapLeft { it.mapErrorForCustomer() } + .map { customerInfo -> + MainScreenCustomerInfo(info = customerInfo, orderStatus = orderData.status) + } + } + + // Order cancelled. No need to get customer info + OrderStatus.CANCELED -> { + MainScreenCustomerInfo( + info = CustomerInfo( + customerId = null, + productInstance = null, + kycStatus = KycStatus.INIT, + cardInfo = null, + ), + orderStatus = OrderStatus.CANCELED, + ).right() + } - // Order was created/cancelled -> clear order id and get customer info OrderStatus.COMPLETED, - OrderStatus.CANCELED, OrderStatus.UNKNOWN, -> { onboardingRepository.clearOrderId(userWalletId) - // If order was cancelled -> start order creation - if (orderData.status == OrderStatus.CANCELED) onboardingRepository.createOrder(userWalletId) onboardingRepository.getCustomerInfo(userWalletId = userWalletId) .mapLeft { it.mapErrorForCustomer() } .map { customerInfo -> diff --git a/features/tangempay/onboarding/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayOnboardingModel.kt b/features/tangempay/onboarding/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayOnboardingModel.kt index 348378e343..ce4d7a58ce 100644 --- a/features/tangempay/onboarding/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayOnboardingModel.kt +++ b/features/tangempay/onboarding/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayOnboardingModel.kt @@ -94,9 +94,14 @@ internal class TangemPayOnboardingModel @Inject constructor( uiState.transformerUpdate(TangemPayOnboardingButtonLoadingTransformer(isLoading = true)) repository.getCustomerInfo(userWalletId = userWalletId) .onRight { customerInfo -> - uiState.transformerUpdate(TangemPayOnboardingButtonLoadingTransformer(isLoading = false)) when { customerInfo.kycStatus != KycStatus.APPROVED -> { + if (customerInfo.productInstance == null) { + repository.createOrder(userWalletId) + .onLeft { error -> + Timber.e("Error creating order before KYC: $error") + } + } when (params) { is TangemPayOnboardingComponent.Params.ContinueOnboarding -> openKyc(userWalletId) else -> startOnboarding(userWalletId) @@ -104,6 +109,7 @@ internal class TangemPayOnboardingModel @Inject constructor( } else -> back() } + uiState.transformerUpdate(TangemPayOnboardingButtonLoadingTransformer(isLoading = false)) } .onLeft { startOnboarding(userWalletId) } } @@ -174,6 +180,12 @@ internal class TangemPayOnboardingModel @Inject constructor( if (customerInfo.kycStatus == KycStatus.APPROVED) { back() } else { + if (customerInfo.productInstance == null) { + repository.createOrder(userWalletId) + .onLeft { error -> + Timber.e("Error creating order before KYC: $error") + } + } openKyc(userWalletId) } }, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt index 2839523857..9c19535642 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt @@ -56,7 +56,7 @@ internal class TangemPayUpdateInfoStateTransformer( value.orderStatus == OrderStatus.CANCELED -> createCancelledState(customerId) value.info.kycStatus != KycStatus.APPROVED && !value.info.customerId.isNullOrEmpty() -> createKycInProgressState(kycStatus = value.info.kycStatus, customerId = customerId) - cardInfo != null && productInstance != null -> + cardInfo != null && productInstance != null && value.orderStatus == OrderStatus.COMPLETED -> getCardInfoState(customerId, cardInfo, productInstance) else -> createIssueProgressState() } From a709903f8b89b4a043fded05713839b98432d546 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 19 Mar 2026 13:25:14 +0000 Subject: [PATCH 5/6] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index f98056e6bf..034e3562ab 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,9 +5,9 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.35-1449" +tangemBlockchainSdk = "develop-1447" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "releases-5.35-596" +tangemCardSdk = "develop-582" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem12" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ From a127ebc8c9d17be4bcc5f1daa47a43dba4a43fe4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 20 Mar 2026 15:32:37 +0300 Subject: [PATCH 6/6] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 25 +++++++++++++++++++++ core/res/src/main/res/values-ja/strings.xml | 23 ++++++++++++++++--- core/res/src/main/res/values/strings.xml | 3 +++ 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index de8a0facb8..c4760bb8a5 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -326,6 +326,7 @@ NFT Nein Keine Adresse + Keine Ergebnisse gefunden Nicht hinzugefügt Nicht verfügbar Nicht jetzt @@ -384,6 +385,7 @@ An Zu %s Heute + Zu sendendes Token %d Token %d Token @@ -396,6 +398,7 @@ Ich verstehe Ich verstehe, fahre bitte fort. Es ist ein Fehler aufgetreten. Bitte versuche es erneut. + Freischalten Nicht erreichbar Staking beenden Aufgrund der Beschränkungen von %1$s können nur %2$d UTXOs in eine einzige Transaktion passen. Das bedeutet, dass du nur %3$s oder weniger senden kannst. Du musst den Betrag reduzieren. @@ -688,6 +691,9 @@ Legen Sie die Karte oder Ring zum Scannen an Tippen um zu signieren Lege die Karte oder Ring an + Deine Wallet ist eingerichtet und einsatzbereit! + Wallet erfolgreich importiert + Wiederherstellung %d% Du hast deine biometrischen Daten aktualisiert, scanne deine Karte oder Ring, um einzutreten Dein Guthaben sollte höher sein als der Gebührenwert, um eine Überweisung zu tätigen Unzureichende Mittel @@ -699,6 +705,7 @@ Mana-Level Um mit der Verfolgung deiner Krypto-Assets und -Transaktionen zu beginnen, füge einen Token hinzu Token verwalten + QR-Code scannen, um Geld zu senden oder eine Verbindung zu einer App herzustellen Um auf alle Netzwerke zugreifen zu können, musst du die Karte oder Ring scannen Scanne deine Karte oder Ring Genießen %1$s Servicegebühren auf Swaps über Changelly von Februar %2$s-%3$s @@ -736,6 +743,8 @@ Verdiene Geld mit Tangem Um Adressen für ausgewählte Netzwerke zu generieren, musst du eine Tangem-Karte oder Ring scannen Um Token hinzuzufügen, rufe dies auf oder tippe auf die Suchleiste + Wischen Sie nach oben, um den Markt zu erkunden + Entdecke neue verborgene Schätze Die Daten dieses Abschnitts stammen aus den folgenden Netzwerken: %s Die Daten konnten nicht geladen werden... Keine Daten @@ -798,6 +807,10 @@ Inhaber/ Halter Die Änderung der Anzahl der Token-Inhaber innerhalb eines bestimmten Zeitraums Inhaber/ Halter + D + M + W + Y Einblicke Links Liquidität @@ -825,9 +838,11 @@ Gesamtangebot Die maximale Anzahl von Coins oder Tokens, die jemals für eine bestimmte Kryptowährung existieren können Gesamtangebot + 24 Stunden Handelsvolumen (24h) Der Gesamtbetrag einer Kryptowährung, der innerhalb der letzten 24 Stunden gehandelt wurde, wobei das Aktivitäts- und Liquiditätsniveau auf dem Markt angegeben wird Handelsvolumen (24h) + %s insgesamt Volumen Rufe dies auf oder tippe auf die Suchleiste, um Token direkt vom Markt hinzuzufügen Token hinzufügen @@ -1088,6 +1103,10 @@ Einstellungen Du hast keinen Zugriff auf deine Kamera gewährt Kamerazugriff verweigert + Dieser QR-Code konnte leider nicht erkannt werden. + Unerkannter QR-Code + Dieses Netzwerk wird von keinem der von Ihnen hinzugefügten Token unterstützt. Fügen Sie einen unterstützten Token hinzu, um Krypto zu senden. + Keine unterstützten Token gefunden Kein Memo erforderlich %1$s ( %2$s ) im %3$s Netzwerk %1$s im %2$s Netzwerk @@ -1229,7 +1248,11 @@ Begrenzung der Transaktionen Optional Bitte richte den QR-Code auf das Quadrat aus, um ihn zu scannen. Stell sicher, dass du die Netzwerkadresse %s scannen. + Wenn Sie einen festen Zinssatz verwenden, wird der Betrag, den Sie erhalten, zum Zeitpunkt des Swapgeschäfts festgelegt. Dies schützt Sie vor Preisänderungen während der Transaktion. + Fester Zinssatz Ein variabler Zinssatz bedeutet, dass sich der endgültige Betrag, den Sie erhalten, je nach Marktbedingungen zwischen dem Beginn und dem Abschluss des Swaps geringfügig ändern kann. + Variabler Zinssatz + Der Zinssatz ist fest. Jüngste Empfänger Keine gültige Adresse @@ -1273,6 +1296,7 @@ Empfänger erhält %s Möchtest Du die Konvertierung wirklich abbrechen? Deine bisherigen Daten werden gelöscht. Konvertierung entfernen + Etwas ist schiefgelaufen. Versuchen Sie es erneut. Senden mit Swap Transaktion gesendet Bereite das Scannen der Karte oder Ring vor, die du einrichten möchtest. @@ -1510,6 +1534,7 @@ KYC vom Hauptbildschirm ausblenden Guthaben hinzufügen Aufladeoptionen + Zu Google Wallet hinzufügen Kartennummer PIN ändern Die Karte ist vollständig für Zahlungen bereit. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 42b792db6e..6efdf8cd26 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -475,7 +475,7 @@ ネットワーク よく使われています 該当する結果はありません - 運用 + ステーキング・利息モード こんにちは、サポートチームの皆さん、コード %s のエラーが発生しました。 WalletConnectエラー 別のウォレットのカードまたはリングを使用しました。このウォレットにリンクしているカードまたはリングをタップしてください。 @@ -685,6 +685,9 @@ タップしてスキャン タップして署名 カードまたはリングをタップ + ウォレットは同期され、準備ができています。\n一部のトークンが見つかりませんか? + ウォレットのインポートが完了しました + %d%を復元中 生体認証を更新しました。カードまたはリングをスキャンして入ってください。 送金するには、残高が手数料額より高くなければなりません。 残高不足 @@ -730,7 +733,7 @@ APY %s 私のポートフォリオ マーケット - Tangemで稼ぐ + ステーキング・利息モード 選択したネットワークのアドレスを生成するには、Tangemウォレットカードまたはリングをスキャンする必要があります。 トークンを追加するには、これをスワイプするか、検索バーをタップしてください。 上にスワイプしてマーケットをチェック @@ -744,6 +747,7 @@ 結果 時価総額10万ドル以下のトークンを見る トークンを表示 + 暗号資産、ニュースなど 検索結果はありません ネットワークを選択 ウォレットを選択 @@ -1035,7 +1039,7 @@ 買付金額は%s以下にしてください 買付金額は少なくとも%sである必要があります この通貨で利用可能なプロバイダーはありません - 最短処理 + 最短で処理 支払う 支払方法 最大 %s まで使用可能 @@ -1083,6 +1087,12 @@ 設定 カメラへのアクセスを許可していません。 カメラへのアクセスが拒否されました + 指定したトークンがウォレットに追加されていません。追加してからもう一度お試しください。 + トークンが追加されていません + 申し訳ありません。このQRコードを認識できませんでした。 + 認識できないQRコード + このネットワークは、追加されているトークンのいずれにも対応していません。対応しているトークンを追加してから暗号資産を送金してください。 + 対応しているトークンが見つかりません メモ不要 %3$sネットワーク上の%1$s ( %2$s ) %2$sネットワーク上の%1$s @@ -1225,6 +1235,11 @@ 取引制限 オプション QRコードを正方形に合わせてスキャンしてください。%s ネットワークアドレスをスキャンしてください。 + 固定レートを使用すると、受け取る金額はスワップ時点で確定します。これにより、取引中の価格変動から保護されます。 + 固定レート + 変動レートとは、スワップ開始から完了までの間の市場状況に応じて、最終的に受け取る金額がわずかに変動する可能性があることを意味します。 + 変動レート + レートは固定されています 最近の取引 受取人 有効なアドレスではありません @@ -1268,6 +1283,7 @@ 受信者は%sを取得します 変換をキャンセルしてもよろしいですか?以前のデータは消去されます。 変換を削除 + 問題が発生しました。もう一度お試しください。 スワップして送信 取引が送信されました 設定したいカードまたはリングをスキャンするために準備してください。 @@ -1461,6 +1477,7 @@ 選択したトークンをこの量を交換すると、価格に大きな影響が生じ、結果が減少します。 価格への影響が甚大です 残高不足 + この取引を完了するには残高が不足しています。受け取り額を減らすか、資金を追加してください。 許可を与える スワップ スワップ中… diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index cd16482c4c..5f645487de 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -306,6 +306,7 @@ hour Import In progress + Insufficient balance Later Learn more %1$s left @@ -755,6 +756,7 @@ Result See tokens under 100k USD market cap Show tokens + Crypto, news and more No result Select network Select wallet @@ -1497,6 +1499,7 @@ Swapping this amount of selected tokens will cause a significant price impact and reduce your outcome. High price impact Insufficient funds + Not enough funds to complete this transaction. Reduce the amount to receive or add more funds. Give Permission Swap Swapping...