diff --git a/app/build.gradle b/app/build.gradle index c22170efcc4..337774fada9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,7 +19,7 @@ android { compileSdk compile_sdk_version minSdkVersion min_sdk_version targetSdkVersion compile_sdk_version - versionCode 111 + versionCode 114 versionName "0.40.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -275,7 +275,7 @@ dependencies { implementation 'com.github.horizontalsystems:blockchain-fee-rate-kit-android:1d3bd49' implementation 'com.github.horizontalsystems:binance-chain-kit-android:c1509a2' implementation 'com.github.horizontalsystems:market-kit-android:636ca4d' - implementation 'com.github.horizontalsystems:solana-kit-android:ec238b4' + implementation 'com.github.horizontalsystems:solana-kit-android:ce738d8' implementation 'com.github.horizontalsystems:tron-kit-android:dc3dca7' // Zcash SDK coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 76022b09285..b671a4a0c4b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -92,6 +92,14 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/core/Extensions.kt b/app/src/main/java/io/horizontalsystems/bankwallet/core/Extensions.kt index e645e6ac42b..0479db62528 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/core/Extensions.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/core/Extensions.kt @@ -1,5 +1,8 @@ package io.horizontalsystems.bankwallet.core +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper import android.content.Intent import android.os.Parcelable import android.widget.ImageView @@ -224,4 +227,10 @@ suspend fun retryWhen( delay(1000) } return block() +} + +fun Context.findActivity(): Activity? = when (this) { + is Activity -> this + is ContextWrapper -> baseContext.findActivity() + else -> null } \ No newline at end of file diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/core/Interfaces.kt b/app/src/main/java/io/horizontalsystems/bankwallet/core/Interfaces.kt index eba4b873021..66b25457695 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/core/Interfaces.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/core/Interfaces.kt @@ -7,6 +7,7 @@ import io.horizontalsystems.bankwallet.core.adapters.zcash.ZcashAdapter import io.horizontalsystems.bankwallet.core.managers.ActiveAccountState import io.horizontalsystems.bankwallet.core.managers.Bep2TokenInfoService import io.horizontalsystems.bankwallet.core.managers.EvmKitWrapper +import io.horizontalsystems.bankwallet.core.managers.MiniAppRegisterService.RegisterAppResponse import io.horizontalsystems.bankwallet.core.providers.FeeRates import io.horizontalsystems.bankwallet.core.utils.AddressUriResult import io.horizontalsystems.bankwallet.entities.Account @@ -214,6 +215,7 @@ interface INetworkManager { fun ping(host: String, url: String, isSafeCall: Boolean): Flowable fun getEvmInfo(host: String, path: String): Single suspend fun getBep2Tokens(): List + suspend fun registerApp(userId: String, referralCode: String): RegisterAppResponse } interface IClipboardManager { diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/core/managers/NetworkManager.kt b/app/src/main/java/io/horizontalsystems/bankwallet/core/managers/NetworkManager.kt index 468e88ce96c..24d0a2a059b 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/core/managers/NetworkManager.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/core/managers/NetworkManager.kt @@ -53,6 +53,11 @@ class NetworkManager : INetworkManager { override suspend fun getBep2Tokens(): List { return Bep2TokenInfoService.service().tokens() } + + override suspend fun registerApp(userId: String, referralCode: String) + : MiniAppRegisterService.RegisterAppResponse { + return MiniAppRegisterService.service().registerApp(userId, referralCode) + } } object ServiceFullTransaction { @@ -145,6 +150,28 @@ object ServiceChangeLogs { } } +object MiniAppRegisterService { + private val apiUrl = "https://be.unstoppable.money/" + + fun service(): UnstoppableApi { + return APIClient.retrofit(apiUrl, 60) + .create(UnstoppableApi::class.java) + } + + interface UnstoppableApi { + @GET("api/v1/tasks/registerApp") + suspend fun registerApp( + @Query("userId") userId: String, + @Query("referralCode") referralCode: String + ): RegisterAppResponse + } + + data class RegisterAppResponse( + val success: Boolean, + val message: String + ) +} + object APIClient { private val logger = HttpLoggingInterceptor().apply { diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddSolanaTokenBlockchainService.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddSolanaTokenBlockchainService.kt new file mode 100644 index 00000000000..2f407df94be --- /dev/null +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddSolanaTokenBlockchainService.kt @@ -0,0 +1,50 @@ +package io.horizontalsystems.bankwallet.modules.addtoken + +import io.horizontalsystems.bankwallet.core.customCoinUid +import io.horizontalsystems.bankwallet.modules.addtoken.AddTokenModule.IAddTokenBlockchainService +import io.horizontalsystems.marketkit.models.Blockchain +import io.horizontalsystems.marketkit.models.Coin +import io.horizontalsystems.marketkit.models.Token +import io.horizontalsystems.marketkit.models.TokenQuery +import io.horizontalsystems.marketkit.models.TokenType +import io.horizontalsystems.solanakit.core.TokenProvider +import io.horizontalsystems.solanakit.models.Address +import io.horizontalsystems.solanakit.transactions.SolanaFmService + +class AddSolanaTokenBlockchainService( + private val blockchain: Blockchain, + private val tokenProvider: TokenProvider +) : IAddTokenBlockchainService { + + override fun isValid(reference: String): Boolean { + return try { + Address(reference) + true + } catch (e: Throwable) { + false + } + } + + override fun tokenQuery(reference: String): TokenQuery { + return TokenQuery(blockchain.type, TokenType.Spl(reference)) + } + + override suspend fun token(reference: String): Token { + val tokenInfo = tokenProvider.getTokenInfo(reference) + val tokenQuery = tokenQuery(reference) + return Token( + coin = Coin(tokenQuery.customCoinUid, tokenInfo.name, tokenInfo.symbol, tokenInfo.decimals), + blockchain = blockchain, + type = tokenQuery.tokenType, + decimals = tokenInfo.decimals + ) + } + + companion object { + fun getInstance(blockchain: Blockchain): AddSolanaTokenBlockchainService { + val tokenProvider = TokenProvider(SolanaFmService()) + return AddSolanaTokenBlockchainService(blockchain, tokenProvider) + } + } + +} diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddTokenService.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddTokenService.kt index 5cfd2c8fdb4..caef99814b1 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddTokenService.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddTokenService.kt @@ -33,6 +33,7 @@ class AddTokenService( BlockchainType.Fantom, BlockchainType.ArbitrumOne, BlockchainType.Optimism, + BlockchainType.Solana ) val blockchains = marketKit @@ -52,6 +53,9 @@ class AddTokenService( BlockchainType.Tron -> { AddTronTokenBlockchainService.getInstance(blockchain) } + BlockchainType.Solana -> { + AddSolanaTokenBlockchainService.getInstance(blockchain) + } else -> AddEvmTokenBlockchainService.getInstance(blockchain) } diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/coin/overview/ui/Chart.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/coin/overview/ui/Chart.kt index 37542aa1a63..db138acc523 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/coin/overview/ui/Chart.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/coin/overview/ui/Chart.kt @@ -24,7 +24,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.Icon -import androidx.compose.material.ScrollableTabRow import androidx.compose.material.Tab import androidx.compose.material.Text import androidx.compose.runtime.Composable @@ -64,6 +63,7 @@ import io.horizontalsystems.bankwallet.ui.compose.ComposeAppTheme import io.horizontalsystems.bankwallet.ui.compose.components.GraphicBars import io.horizontalsystems.bankwallet.ui.compose.components.GraphicBarsWithNegative import io.horizontalsystems.bankwallet.ui.compose.components.HSpacer +import io.horizontalsystems.bankwallet.ui.compose.components.HsPeriodsScrollableTabRow import io.horizontalsystems.bankwallet.ui.compose.components.RowUniversal import io.horizontalsystems.bankwallet.ui.compose.components.TabButtonSecondaryTransparent import io.horizontalsystems.bankwallet.ui.compose.components.TabItem @@ -702,28 +702,31 @@ fun ChartTab(modifier: Modifier = Modifier, tabItems: List>, onSe val tabIndex = tabItems.indexOfFirst { it.selected } TabPeriod(modifier = modifier) { - ScrollableTabRow( + HsPeriodsScrollableTabRow( selectedTabIndex = tabIndex, modifier = Modifier, backgroundColor = Color.Transparent, - edgePadding = 0.dp, + edgePadding = 12.dp, indicator = {}, divider = {} ) { tabItems.forEachIndexed { index, tabItem -> val selected = tabIndex == index - - Tab( - selected = selected, - onClick = { }, + Row( + modifier = Modifier.padding(horizontal = 4.dp) ) { - TabButtonSecondaryTransparent( - title = tabItem.title, - onSelect = { - onSelect.invoke(tabItem.item) - }, - selected = selected - ) + Tab( + selected = selected, + onClick = { }, + ) { + TabButtonSecondaryTransparent( + title = tabItem.title, + onSelect = { + onSelect.invoke(tabItem.item) + }, + selected = selected + ) + } } } } diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainFragment.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainFragment.kt index ab26473d100..51fcefd1bf2 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainFragment.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainFragment.kt @@ -1,6 +1,5 @@ package io.horizontalsystems.bankwallet.modules.main -import android.net.Uri import android.os.Bundle import androidx.activity.OnBackPressedCallback import androidx.activity.compose.BackHandler @@ -38,6 +37,7 @@ import androidx.navigation.NavController import androidx.navigation.navGraphViewModels import io.horizontalsystems.bankwallet.R import io.horizontalsystems.bankwallet.core.BaseComposeFragment +import io.horizontalsystems.bankwallet.core.findActivity import io.horizontalsystems.bankwallet.core.managers.RateAppManager import io.horizontalsystems.bankwallet.core.slideFromBottom import io.horizontalsystems.bankwallet.core.slideFromRight @@ -73,21 +73,17 @@ import kotlinx.coroutines.launch class MainFragment : BaseComposeFragment() { private val transactionsViewModel by navGraphViewModels(R.id.mainFragment) { TransactionsModule.Factory() } - private var intentUri: Uri? = null @Composable override fun GetContent(navController: NavController) { MainScreenWithRootedDeviceCheck( transactionsViewModel = transactionsViewModel, - deepLink = intentUri, navController = navController, ) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - intentUri = activity?.intent?.data - activity?.intent?.data = null //clear intent data requireActivity().onBackPressedDispatcher.addCallback( this, @@ -103,14 +99,13 @@ class MainFragment : BaseComposeFragment() { @Composable private fun MainScreenWithRootedDeviceCheck( transactionsViewModel: TransactionsViewModel, - deepLink: Uri?, navController: NavController, rootedDeviceViewModel: RootedDeviceViewModel = viewModel(factory = RootedDeviceModule.Factory()) ) { if (rootedDeviceViewModel.showRootedDeviceWarning) { RootedDeviceScreen { rootedDeviceViewModel.ignoreRootedDeviceWarning() } } else { - MainScreen(transactionsViewModel, deepLink, navController) + MainScreen(transactionsViewModel, navController) } } @@ -118,17 +113,27 @@ private fun MainScreenWithRootedDeviceCheck( @Composable private fun MainScreen( transactionsViewModel: TransactionsViewModel, - deepLink: Uri?, fragmentNavController: NavController, - viewModel: MainViewModel = viewModel(factory = MainModule.Factory(deepLink)) + viewModel: MainViewModel = viewModel(factory = MainModule.Factory()) ) { val uiState = viewModel.uiState + val context = LocalContext.current val selectedPage = uiState.selectedTabIndex val pagerState = rememberPagerState(initialPage = selectedPage) { uiState.mainNavItems.size } val coroutineScope = rememberCoroutineScope() val modalBottomSheetState = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden) + LaunchedEffect(Unit) { + context.findActivity()?.let { activity -> + activity.intent?.data?.let { uri -> + viewModel.handleDeepLink(uri) + activity.intent?.data = null //clear intent data + } + } + } + + ModalBottomSheetLayout( sheetState = modalBottomSheetState, sheetBackgroundColor = ComposeAppTheme.colors.transparent, diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainModule.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainModule.kt index c12e3dfc3a0..5c42615e66a 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainModule.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainModule.kt @@ -15,7 +15,7 @@ import kotlinx.parcelize.Parcelize object MainModule { - class Factory(private val wcDeepLink: Uri?) : ViewModelProvider.Factory { + class Factory : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { return MainViewModel( @@ -28,7 +28,7 @@ object MainModule { App.localStorage, App.wcSessionManager, App.wcManager, - wcDeepLink + App.networkManager, ) as T } } diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainViewModel.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainViewModel.kt index 0f16fa15cd8..01b63ad02ec 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainViewModel.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainViewModel.kt @@ -1,12 +1,14 @@ package io.horizontalsystems.bankwallet.modules.main import android.net.Uri +import android.util.Log import androidx.lifecycle.viewModelScope import cash.z.ecc.android.sdk.ext.collectWith import io.horizontalsystems.bankwallet.R import io.horizontalsystems.bankwallet.core.IAccountManager import io.horizontalsystems.bankwallet.core.IBackupManager import io.horizontalsystems.bankwallet.core.ILocalStorage +import io.horizontalsystems.bankwallet.core.INetworkManager import io.horizontalsystems.bankwallet.core.IRateAppManager import io.horizontalsystems.bankwallet.core.ITermsManager import io.horizontalsystems.bankwallet.core.ViewModelUiState @@ -41,7 +43,7 @@ class MainViewModel( private val localStorage: ILocalStorage, wcSessionManager: WCSessionManager, private val wcManager: WCManager, - deepLink: Uri? + private val networkManager: INetworkManager ) : ViewModelUiState() { private var wcPendingRequestsCount = 0 @@ -79,7 +81,7 @@ class MainViewModel( ) } - private var selectedTabIndex = getTabIndexToOpen(deepLink) + private var selectedTabIndex = getTabIndexToOpen() private var deeplinkPage: DeeplinkPage? = null private var mainNavItems = navigationItems() private var showRateAppDialog = false @@ -248,14 +250,7 @@ class MainViewModel( } } - private fun getTabIndexToOpen(deepLink: Uri? = null): Int { - deepLink?.let { - val (tab, deeplinkPageData) = getNavigationDataForDeeplink(it) - deeplinkPage = deeplinkPageData - currentMainTab = tab - return items.indexOf(tab) - } - + private fun getTabIndexToOpen(): Int { val tab = when { relaunchBySettingChange -> { relaunchBySettingChange = false @@ -328,11 +323,34 @@ class MainViewModel( } } + deeplinkString.startsWith("https://unstoppable.money/referral") -> { + val userId: String? = deepLink.getQueryParameter("userId") + val referralCode: String? = deepLink.getQueryParameter("referralCode") + if (userId != null && referralCode != null) { + registerApp(userId, referralCode) + } + } + else -> {} } return Pair(tab, deeplinkPage) } + private fun registerApp(userId: String, referralCode: String) { + viewModelScope.launch { + try { + val response = networkManager.registerApp(userId, referralCode) + if (response.success) { + //do nothing + } else { + Log.e("MainViewModel", "registerApp api fail message: ${response.message}") + } + } catch (e: Exception) { + Log.e("MainViewModel", "registerApp error: ", e) + } + } + } + private fun syncNavigation() { mainNavItems = navigationItems() if (selectedTabIndex >= mainNavItems.size) { @@ -370,4 +388,12 @@ class MainViewModel( emitState() } + fun handleDeepLink(uri: Uri) { + val (tab, deeplinkPageData) = getNavigationDataForDeeplink(uri) + deeplinkPage = deeplinkPageData + currentMainTab = tab + selectedTabIndex = items.indexOf(tab) + syncNavigation() + } + } diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/platform/MarketPlatformFragment.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/platform/MarketPlatformFragment.kt index 1b2957d6053..b33da1f6a92 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/platform/MarketPlatformFragment.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/platform/MarketPlatformFragment.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.Surface @@ -192,37 +191,34 @@ private fun PlatformScreen( @Composable private fun HeaderContent(title: String, description: String, image: ImageSource) { - Column { - Row( + Row( + modifier = Modifier + .padding(horizontal = 16.dp) + .background(ComposeAppTheme.colors.tyler) + ) { + Column( modifier = Modifier - .height(100.dp) - .padding(horizontal = 16.dp) - .background(ComposeAppTheme.colors.tyler) + .padding(top = 12.dp, bottom = 16.dp) + .weight(1f) ) { - Column( - modifier = Modifier - .padding(top = 12.dp) - .weight(1f) - ) { - title3_leah( - text = title, - ) - subhead2_grey( - text = description, - modifier = Modifier.padding(top = 4.dp), - maxLines = 3, - overflow = TextOverflow.Ellipsis - ) - } - Image( - painter = image.painter(), - contentDescription = null, - modifier = Modifier - .align(Alignment.CenterVertically) - .padding(start = 24.dp) - .size(32.dp), + title3_leah( + text = title, + ) + subhead2_grey( + text = description, + modifier = Modifier.padding(top = 4.dp), + maxLines = 3, + overflow = TextOverflow.Ellipsis ) } + Image( + painter = image.painter(), + contentDescription = null, + modifier = Modifier + .align(Alignment.CenterVertically) + .padding(start = 24.dp) + .size(32.dp), + ) } } diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SuggestionsBar.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SuggestionsBar.kt index 277c05dabca..453a49854c3 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SuggestionsBar.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SuggestionsBar.kt @@ -38,7 +38,7 @@ fun SuggestionsBar( Text( text = "$percent%", modifier = modifier, - style = ComposeAppTheme.typography.subhead1, + style = ComposeAppTheme.typography.captionSB, color = if (selectEnabled) { ComposeAppTheme.colors.leah } else { diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapQuoteService.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapQuoteService.kt index 82541bfbbad..2f23c0f3294 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapQuoteService.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapQuoteService.kt @@ -141,7 +141,10 @@ class SwapQuoteService { } .awaitAll() .filterNotNull() - .sortedByDescending { it.amountOut } + .sortedWith( + compareByDescending { it.provider.priority } + .thenByDescending { it.amountOut } + ) } fun setAmount(v: BigDecimal?) { diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapSelectProviderFragment.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapSelectProviderFragment.kt index a7f6d0fcf67..b645a7686c7 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapSelectProviderFragment.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapSelectProviderFragment.kt @@ -35,7 +35,6 @@ import io.horizontalsystems.bankwallet.ui.compose.components.HSpacer import io.horizontalsystems.bankwallet.ui.compose.components.MenuItem import io.horizontalsystems.bankwallet.ui.compose.components.RowUniversal import io.horizontalsystems.bankwallet.ui.compose.components.VSpacer -import io.horizontalsystems.bankwallet.ui.compose.components.subhead2_green50 import io.horizontalsystems.bankwallet.ui.compose.components.subhead2_grey import io.horizontalsystems.bankwallet.ui.compose.components.subhead2_leah @@ -126,13 +125,6 @@ private fun SwapSelectProviderScreenInner( text = provider.title, textAlign = TextAlign.End ) - if (i == 0) { - VSpacer(height = 1.dp) - subhead2_green50( - text = stringResource(R.string.Swap_BestPrice), - textAlign = TextAlign.End - ) - } } HFillSpacer(minWidth = 8.dp) Column(horizontalAlignment = Alignment.End) { diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/IMultiSwapProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/IMultiSwapProvider.kt index 1e9529eaac5..ae6035339ef 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/IMultiSwapProvider.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/IMultiSwapProvider.kt @@ -12,6 +12,7 @@ interface IMultiSwapProvider { val title: String val url: String val icon: Int + val priority: Int fun supports(tokenFrom: Token, tokenTo: Token): Boolean { return tokenFrom.blockchainType == tokenTo.blockchainType && diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/OneInchProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/OneInchProvider.kt index e8cd42540db..b57007de91e 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/OneInchProvider.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/OneInchProvider.kt @@ -32,6 +32,7 @@ object OneInchProvider : EvmSwapProvider() { override val title = "1inch" override val url = "https://app.1inch.io/" override val icon = R.drawable.oneinch + override val priority = 100 private val oneInchKit by lazy { OneInchKit.getInstance(App.appConfigProvider.oneInchApiKey) } private const val PARTNER_FEE: Float = 0.3F private const val PARTNER_ADDRESS: String = "0xe42BBeE8389548fAe35C09072065b7fEc582b590" diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapProvider.kt index 45f3ec9cf7e..25ad533d11f 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapProvider.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapProvider.kt @@ -8,6 +8,7 @@ object PancakeSwapProvider : BaseUniswapProvider() { override val title = "PancakeSwap" override val url = "https://pancakeswap.finance/" override val icon = R.drawable.pancake + override val priority = 0 override fun supports(blockchainType: BlockchainType): Boolean { return blockchainType == BlockchainType.BinanceSmartChain diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapV3Provider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapV3Provider.kt index 87194089f31..ef21ad2dacc 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapV3Provider.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapV3Provider.kt @@ -9,6 +9,7 @@ object PancakeSwapV3Provider : BaseUniswapV3Provider(DexType.PancakeSwap) { override val title = "PancakeSwap V3" override val url = "https://pancakeswap.finance/" override val icon = R.drawable.pancake_v3 + override val priority = 0 override fun supports(blockchainType: BlockchainType) = when (blockchainType) { BlockchainType.BinanceSmartChain, diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/QuickSwapProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/QuickSwapProvider.kt index 13f8d5747cd..972cbe17eff 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/QuickSwapProvider.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/QuickSwapProvider.kt @@ -8,6 +8,7 @@ object QuickSwapProvider : BaseUniswapProvider() { override val title = "QuickSwap" override val url = "https://quickswap.exchange/" override val icon = R.drawable.quickswap + override val priority = 0 override fun supports(blockchainType: BlockchainType): Boolean { return blockchainType == BlockchainType.Polygon diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapProvider.kt index 2e85740f521..afa5e92b6f0 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapProvider.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapProvider.kt @@ -8,6 +8,7 @@ object UniswapProvider : BaseUniswapProvider() { override val title = "Uniswap" override val url = "https://uniswap.org/" override val icon = R.drawable.uniswap + override val priority = 0 override fun supports(blockchainType: BlockchainType): Boolean { return blockchainType == BlockchainType.Ethereum diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapV3Provider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapV3Provider.kt index d0e1503af70..1da5b507fd1 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapV3Provider.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapV3Provider.kt @@ -9,6 +9,7 @@ object UniswapV3Provider : BaseUniswapV3Provider(DexType.Uniswap) { override val title = "Uniswap V3" override val url = "https://uniswap.org/" override val icon = R.drawable.uniswap_v3 + override val priority = 0 override fun supports(blockchainType: BlockchainType) = when (blockchainType) { BlockchainType.Ethereum, diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/restoreaccount/restoremnemonic/RestorePhraseScreen.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/restoreaccount/restoremnemonic/RestorePhraseScreen.kt index 63200c3c06b..b4570006003 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/restoreaccount/restoremnemonic/RestorePhraseScreen.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/restoreaccount/restoremnemonic/RestorePhraseScreen.kt @@ -98,8 +98,8 @@ import io.horizontalsystems.bankwallet.ui.compose.components.SelectorItem import io.horizontalsystems.bankwallet.ui.compose.components.TextImportantWarning import io.horizontalsystems.bankwallet.ui.compose.components.body_grey50 import io.horizontalsystems.bankwallet.ui.compose.components.body_leah +import io.horizontalsystems.bankwallet.ui.compose.components.captionSB_leah import io.horizontalsystems.bankwallet.ui.compose.components.caption_lucian -import io.horizontalsystems.bankwallet.ui.compose.components.subhead1_leah import io.horizontalsystems.bankwallet.ui.compose.observeKeyboardState import io.horizontalsystems.core.helpers.HudHelper import kotlinx.coroutines.CoroutineScope @@ -522,7 +522,7 @@ fun SuggestionsBar( onClick.invoke(wordItem, suggestion) } ) { - subhead1_leah(text = suggestion) + captionSB_leah(text = suggestion) } Spacer(modifier = Modifier.width(12.dp)) } diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/walletconnect/request/sendtransaction/WCSendEthereumTransactionRequestViewModel.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/walletconnect/request/sendtransaction/WCSendEthereumTransactionRequestViewModel.kt index e5d87e34d85..cd5d625d503 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/walletconnect/request/sendtransaction/WCSendEthereumTransactionRequestViewModel.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/walletconnect/request/sendtransaction/WCSendEthereumTransactionRequestViewModel.kt @@ -9,6 +9,7 @@ import io.horizontalsystems.bankwallet.core.ViewModelUiState import io.horizontalsystems.bankwallet.core.ethereum.CautionViewItem import io.horizontalsystems.bankwallet.core.ethereum.EvmCoinServiceFactory import io.horizontalsystems.bankwallet.core.providers.Translator +import io.horizontalsystems.bankwallet.core.toHexString import io.horizontalsystems.bankwallet.modules.multiswap.sendtransaction.SendTransactionData import io.horizontalsystems.bankwallet.modules.multiswap.sendtransaction.SendTransactionServiceEvm import io.horizontalsystems.bankwallet.modules.multiswap.sendtransaction.SendTransactionServiceState @@ -20,7 +21,6 @@ import io.horizontalsystems.bankwallet.modules.sendevmtransaction.ValueType import io.horizontalsystems.bankwallet.modules.sendevmtransaction.ViewItem import io.horizontalsystems.bankwallet.modules.walletconnect.WCDelegate import io.horizontalsystems.bankwallet.modules.walletconnect.request.WCChainData -import io.horizontalsystems.core.toHexString import io.horizontalsystems.ethereumkit.models.TransactionData import io.horizontalsystems.marketkit.models.BlockchainType import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/ButtonSecondary.kt b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/ButtonSecondary.kt index d935651b73a..bb391bbacd9 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/ButtonSecondary.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/ButtonSecondary.kt @@ -243,7 +243,7 @@ fun ButtonSecondary( enabled = enabled, ) { ProvideTextStyle( - value = ComposeAppTheme.typography.subhead1 + value = ComposeAppTheme.typography.captionSB ) { Row( Modifier diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/TabButton.kt b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/TabButton.kt index 72e09a022c4..593a7f5c435 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/TabButton.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/TabButton.kt @@ -1,33 +1,68 @@ package io.horizontalsystems.bankwallet.ui.compose.components -import androidx.compose.foundation.layout.* +import androidx.compose.animation.core.AnimationSpec +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.animateDpAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.background +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.selection.selectableGroup import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.* -import androidx.compose.runtime.* +import androidx.compose.material.Button +import androidx.compose.material.Divider +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.LocalContentAlpha +import androidx.compose.material.LocalContentColor +import androidx.compose.material.MaterialTheme +import androidx.compose.material.ProvideTextStyle +import androidx.compose.material.ScrollableTabRow +import androidx.compose.material.Surface +import androidx.compose.material.TabRow +import androidx.compose.material.TabRowDefaults +import androidx.compose.material.Text +import androidx.compose.material.contentColorFor +import androidx.compose.material.primarySurface +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.State +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.UiComposable +import androidx.compose.ui.composed +import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.layout.SubcomposeLayout +import androidx.compose.ui.platform.debugInspectorInfo +import androidx.compose.ui.unit.Constraints +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.compose.ui.util.fastForEach +import androidx.compose.ui.util.fastMap import io.horizontalsystems.bankwallet.ui.compose.ComposeAppTheme +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch -@Composable -fun TabButtonSecondary( - title: String, - onSelect: () -> Unit, - selected: Boolean = false, - enabled: Boolean = true -) { - TabBox( - colors = TabDefaults.textButtonColors( - backgroundColor = ComposeAppTheme.colors.steel20, - ), - content = { Text(title) }, - selected = selected, - enabled = enabled, - onSelect = onSelect - ) -} @Composable fun TabButtonSecondaryTransparent( @@ -58,7 +93,9 @@ fun TabBox( ) { Box { val contentColor by if (enabled) colors.contentColor(selected) else colors.contentColorDisabled() - val backgroundColor by if (enabled) colors.backgroundColor(selected) else colors.backgroundColor(false) + val backgroundColor by if (enabled) colors.backgroundColor(selected) else colors.backgroundColor( + false + ) Surface( onClick = onSelect, color = backgroundColor, @@ -71,7 +108,7 @@ fun TabBox( // style property. CompositionLocalProvider(LocalContentAlpha provides contentColor.alpha) { ProvideTextStyle( - value = ComposeAppTheme.typography.subhead1 + value = ComposeAppTheme.typography.captionSB ) { Row( Modifier @@ -80,7 +117,12 @@ fun TabBox( minHeight = TabDefaults.MinHeight ) .height(TabDefaults.MinHeight) - .padding(contentPadding), + .padding( + PaddingValues( + start = 0.dp, + end = 0.dp, + ) + ), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically, content = content @@ -91,6 +133,304 @@ fun TabBox( } } +//Customized version of ScrollableTabRow +//needed to make +@Composable +@UiComposable +fun HsPeriodsScrollableTabRow( + selectedTabIndex: Int, + modifier: Modifier = Modifier, + backgroundColor: Color = MaterialTheme.colors.primarySurface, + contentColor: Color = contentColorFor(backgroundColor), + edgePadding: Dp = HsTabRowDefaults.ScrollableTabRowPadding, + indicator: @Composable @UiComposable + (tabPositions: List) -> Unit = @Composable { tabPositions -> + HsTabRowDefaults.Indicator( + Modifier.hsTabIndicatorOffset(tabPositions[selectedTabIndex]) + ) + }, + divider: @Composable @UiComposable () -> Unit = + @Composable { + TabRowDefaults.Divider() + }, + tabs: @Composable @UiComposable () -> Unit +) { + Surface( + modifier = modifier, + color = backgroundColor, + contentColor = contentColor + ) { + val scrollState = rememberScrollState() + val coroutineScope = rememberCoroutineScope() + val scrollableTabData = remember(scrollState, coroutineScope) { + HsScrollableTabData( + scrollState = scrollState, + coroutineScope = coroutineScope + ) + } + SubcomposeLayout( + Modifier + .fillMaxWidth() + .wrapContentSize(align = Alignment.CenterStart) + .horizontalScroll(scrollState) + .selectableGroup() + .clipToBounds() + ) { constraints -> + val minTabWidth = 40.dp.roundToPx() + val padding = edgePadding.roundToPx() + val tabConstraints = constraints.copy(minWidth = minTabWidth) + + val tabPlaceables = subcompose(HsTabSlots.Tabs, tabs) + .fastMap { it.measure(tabConstraints) } + + var layoutWidth = padding * 2 + var layoutHeight = 0 + tabPlaceables.fastForEach { + layoutWidth += it.width + layoutHeight = maxOf(layoutHeight, it.height) + } + + // Position the children. + layout(layoutWidth, layoutHeight) { + // Place the tabs + val tabPositions = mutableListOf() + var left = padding + tabPlaceables.fastForEach { + it.placeRelative(left, 0) + tabPositions.add(TabPosition(left = left.toDp(), width = it.width.toDp())) + left += it.width + } + + // The divider is measured with its own height, and width equal to the total width + // of the tab row, and then placed on top of the tabs. + subcompose(HsTabSlots.Divider, divider).fastForEach { + val placeable = it.measure( + constraints.copy( + minHeight = 0, + minWidth = layoutWidth, + maxWidth = layoutWidth + ) + ) + placeable.placeRelative(0, layoutHeight - placeable.height) + } + + // The indicator container is measured to fill the entire space occupied by the tab + // row, and then placed on top of the divider. + subcompose(HsTabSlots.Indicator) { + indicator(tabPositions) + }.fastForEach { + it.measure(Constraints.fixed(layoutWidth, layoutHeight)).placeRelative(0, 0) + } + + scrollableTabData.onLaidOut( + density = this@SubcomposeLayout, + edgeOffset = padding, + tabPositions = tabPositions, + selectedTab = selectedTabIndex + ) + } + } + } +} + +private fun Modifier.hsTabIndicatorOffset( + currentTabPosition: TabPosition +): Modifier = composed( + inspectorInfo = debugInspectorInfo { + name = "tabIndicatorOffset" + value = currentTabPosition + } +) { + val currentTabWidth by animateDpAsState( + targetValue = currentTabPosition.width, + animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing) + ) + val indicatorOffset by animateDpAsState( + targetValue = currentTabPosition.left, + animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing) + ) + fillMaxWidth() + .wrapContentSize(Alignment.BottomStart) + .offset(x = indicatorOffset) + .width(currentTabWidth) +} + +private class HsScrollableTabData( + private val scrollState: ScrollState, + private val coroutineScope: CoroutineScope +) { + private var selectedTab: Int? = null + + fun onLaidOut( + density: Density, + edgeOffset: Int, + tabPositions: List, + selectedTab: Int + ) { + // Animate if the new tab is different from the old tab, or this is called for the first + // time (i.e selectedTab is `null`). + if (this.selectedTab != selectedTab) { + this.selectedTab = selectedTab + tabPositions.getOrNull(selectedTab)?.let { + // Scrolls to the tab with [tabPosition], trying to place it in the center of the + // screen or as close to the center as possible. + val calculatedOffset = it.hsCalculateTabOffset(density, edgeOffset, tabPositions) + if (scrollState.value != calculatedOffset) { + coroutineScope.launch { + scrollState.animateScrollTo( + calculatedOffset, + animationSpec = ScrollableTabRowScrollSpec + ) + } + } + } + } + } + + private fun TabPosition.hsCalculateTabOffset( + density: Density, + edgeOffset: Int, + tabPositions: List + ): Int = with(density) { + val totalTabRowWidth = tabPositions.last().right.roundToPx() + edgeOffset + val visibleWidth = totalTabRowWidth - scrollState.maxValue + val tabOffset = left.roundToPx() + val scrollerCenter = visibleWidth / 2 + val tabWidth = width.roundToPx() + val centeredTabOffset = tabOffset - (scrollerCenter - tabWidth / 2) + // How much space we have to scroll. If the visible width is <= to the total width, then + // we have no space to scroll as everything is always visible. + val availableSpace = (totalTabRowWidth - visibleWidth).coerceAtLeast(0) + return centeredTabOffset.coerceIn(0, availableSpace) + } +} + +@Immutable +class TabPosition internal constructor(val left: Dp, val width: Dp) { + val right: Dp get() = left + width + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is TabPosition) return false + + if (left != other.left) return false + if (width != other.width) return false + + return true + } + + override fun hashCode(): Int { + var result = left.hashCode() + result = 31 * result + width.hashCode() + return result + } + + override fun toString(): String { + return "TabPosition(left=$left, right=$right, width=$width)" + } +} + +object HsTabRowDefaults { + /** + * Default [Divider], which will be positioned at the bottom of the [TabRow], underneath the + * indicator. + * + * @param modifier modifier for the divider's layout + * @param thickness thickness of the divider + * @param color color of the divider + */ + @Composable + fun Divider( + modifier: Modifier = Modifier, + thickness: Dp = DividerThickness, + color: Color = LocalContentColor.current.copy(alpha = DividerOpacity) + ) { + androidx.compose.material.Divider(modifier = modifier, thickness = thickness, color = color) + } + + /** + * Default indicator, which will be positioned at the bottom of the [TabRow], on top of the + * divider. + * + * @param modifier modifier for the indicator's layout + * @param height height of the indicator + * @param color color of the indicator + */ + @Composable + fun Indicator( + modifier: Modifier = Modifier, + height: Dp = IndicatorHeight, + color: Color = LocalContentColor.current + ) { + Box( + modifier + .fillMaxWidth() + .height(height) + .background(color = color) + ) + } + + /** + * [Modifier] that takes up all the available width inside the [TabRow], and then animates + * the offset of the indicator it is applied to, depending on the [currentTabPosition]. + * + * @param currentTabPosition [TabPosition] of the currently selected tab. This is used to + * calculate the offset of the indicator this modifier is applied to, as well as its width. + */ + fun Modifier.tabIndicatorOffset( + currentTabPosition: androidx.compose.material.TabPosition + ): Modifier = composed( + inspectorInfo = debugInspectorInfo { + name = "tabIndicatorOffset" + value = currentTabPosition + } + ) { + val currentTabWidth by animateDpAsState( + targetValue = currentTabPosition.width, + animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing) + ) + val indicatorOffset by animateDpAsState( + targetValue = currentTabPosition.left, + animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing) + ) + fillMaxWidth() + .wrapContentSize(Alignment.BottomStart) + .offset(x = indicatorOffset) + .width(currentTabWidth) + } + + /** + * Default opacity for the color of [Divider] + */ + const val DividerOpacity = 0.12f + + /** + * Default thickness for [Divider] + */ + val DividerThickness = 1.dp + + /** + * Default height for [Indicator] + */ + val IndicatorHeight = 2.dp + + /** + * The default padding from the starting edge before a tab in a [ScrollableTabRow]. + */ + val ScrollableTabRowPadding = 52.dp +} + +private val ScrollableTabRowScrollSpec: AnimationSpec = tween( + durationMillis = 250, + easing = FastOutSlowInEasing +) + +private enum class HsTabSlots { + Tabs, + Divider, + Indicator +} + object TabDefaults { private val ButtonHorizontalPadding = 16.dp diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8ed30cb3d18..994642f3bce 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -204,6 +204,7 @@ Hohe Wahrscheinlichkeit für Preissenkungen. Erhöhtes Risikoniveau, erfordert Vorsicht. Denken Sie immer daran, das Risikomanagement anzuwenden und beachten Sie, dass dies keine finanzielle Beratung ist. + Aktivieren Top 100 Top 200 Top 300 @@ -223,9 +224,12 @@ Marktkapitalisierung aller Protokolle auf der %s Kette Diagramm + Total Cap BTC-Dominanz in Prozent + 24 Std. Vol. DeFi MK TVL in DeFi + ETF Inflow Gesamtmarktwert aller Kryptowährungen. The historical change in ratio between the market cap of Bitcoin to the rest of the cryptocurrency markets. \n\nTypically, when Bitcoin dominance trending higher the rest of the crypto market trends down and vice versa. Das 24h Handelsvolumen des Krypto-Marktes. @@ -237,6 +241,7 @@ Diese Münze wird noch nicht unterstützt This project doesn’t have a coin + Gesamtnettonzufluss Der Nettogeldzufluss eines ETFs entspricht seinen Geldeingängen abzüglich der Abflüsse. Höchste Vermögenswerte Niedrigste Vermögenswerte @@ -485,6 +490,7 @@ Gebühr Die geschätzten Kosten für den Versand einer Transaktion im Netzwerk (ohne Energie-, Bandbreiten- und Aktivierungsgebühren) Aktivierungsgebühr + Diese Adresse ist nicht aktiv. Die Übertragung von TRX- oder TRC-10-Token an eine inaktive Account-Adresse wird das Konto aktivieren. Verbrauchte Ressourcen Bandbreite ist die Einheit, die die Größe der in der Blockchain-Datenbank gespeicherten Transaktionsbytes misst. Je größer die Transaktion, desto mehr Ressourcen werden verbraucht.\n\nEnergie ist die Einheit, die die Anzahl der Berechnungen misst, die von der virtuellen TRON-Maschine benötigt werden, um bestimmte Operationen im TRON-Netzwerk durchzuführen.\n\nDa intelligente Vertragsabschlüsse die Verwendung von Rechnerressourcen erfordern, muss für jeden Smart Contract eine Energiegebühr bezahlt werden. @@ -528,6 +534,9 @@ Kein passendes Konto Kein passendes evm Kit Datenverarbeitungsfehler + Nicht unterstützte Ketten: %s + Nicht unterstützte Methoden: %s + Nicht unterstützte Ereignisse: %s Anforderungsfehler nicht gefunden Du hast keine verbundenen Dapps Ausstehende Anfragen @@ -819,6 +828,7 @@ per e-Mail Auto-Sperren Sei unaufhaltsam + Lernen Sie Kryptographie über exklusive Videos. Lernen Sie uns informell kennen. Sei der Erste, der Dinge sieht, an denen wir arbeiten. Persönlicher Support Geben Sie Ihren Telegram-Kontonamen ein, um einen persönlichen Support-Chat mit unserem Team zu starten. Wir werden uns mit Ihnen in Verbindung setzen und anfangen, an Ihrem Problem zu arbeiten, sobald wir es sehen. Sie haben bereits einen privaten Chat angefordert, finden Sie ihn auf Telegram @@ -844,7 +854,10 @@ 1 Stunde THEMA TAB EINSTELLUNGEN + MARKETS TAB + BALANCE TAB STARTBILDSCHIRM + APP ICON Saldokonvertierung Saldo Wert Das Ändern des Symbols schließt die Anwendung @@ -882,6 +895,7 @@ Sprache, Währung, Erscheinung ... Unstoppable sammelt keine persönlichen Daten, die Ihre privaten Informationen offen legen, z.B. Münzsalden oder Adressen. Während wir einige UI-Nutzungsstatistiken sammeln, dient es allein dazu, unsere Benutzer- und App-Nutzungstrends zu verstehen. Dies kann deaktiviert werden, wenn Sie es wünschen. + Die Brieftasche sammelt keine persönlichen Daten. Es gibt keine Benutzerkonten oder Datenbanken, die Benutzerdaten speichern. Wenn erlaubt, teilt die Brieftasche App-Nutzungsgewohnheiten mit dem unaufhaltsamen Team. Dies ist zu verstehen, welche Funktionen von unseren Benutzern verwendet werden (oder nicht). Als datenschutzorientierte App brauchen wir eine Möglichkeit, unsere Bemühungen zu bewerten, und ohne dies haben wir keine Ahnung, ob die von uns erstellten Funktionen genutzt werden oder nicht. UI-Daten teilen @@ -953,6 +967,7 @@ Wallets auswählen Wählen Sie die Wallets, die im Duress Modus angezeigt werden. WALLETS + WATCH WALLETS Die unaufhaltsame Brieftasche ist für diejenigen gedacht, die Kryptowährungen auf private und unabhängige Weise investieren und speichern möchten.\n\nEs ist eine nicht-Custodial, Peer-to-Peer-Wallet, bei der nur der Benutzer die Kontrolle über das Guthaben hat. Es sammelt keine Daten und hält den Benutzer unabhängig, indem er das Guthaben des Benutzers nicht an eine bestimmte Wallet-App sperrt.\n\nDie unaufhaltsame Brieftasche ist vollständig Open-Source und jeder kann bestätigen, dass die App genau so funktioniert, wie sie es vorgibt. Sicheres Backup der Wiederherstellungsausdrücke für jede Wallet. Dies ist die einzige Möglichkeit, den Zugriff auf Gelder zurückzugewinnen, wenn die App nicht funktioniert. @@ -1136,6 +1151,7 @@ BIP32 Root Key Tippen um privaten Schlüssel anzuzeigen + To do Private Schlüssel EVM privater Schlüssel @@ -1264,6 +1280,8 @@ Ausgabe Zentralisiert Dezentralisiert + Confiscation-resistance + Censorship-resistance Prüfungen 24h Range Info @@ -1301,6 +1319,7 @@ Zum Wallet hinzugefügt In Wallet Favorit + Unfavorite 1 Woche 1 Monate Lesen Sie mehr @@ -1557,6 +1576,7 @@ Ereignistyp auswählen Alle Liste + Sale Abbrechen Gebot eingegeben Gebot zurückgezogen @@ -1582,6 +1602,7 @@ Melden Der Fehlertext wird in die Zwischenablage kopiert, falls Sie den Fehler melden möchten. + UNSTOPPABLES beitreten Folge Uns Gesperrt Pro Users diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 90e6117e6a4..cc222354518 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -46,6 +46,7 @@ Buscar Atrás Copiar + Browser Eliminar Aprender más Activar @@ -199,9 +200,10 @@ Probable aumento del precio en el futuro cercano. No hay una tendencia clara, el mercado está en equilibrio. Probable disminución del precio en el futuro cercano. - High probability of price decrease. + Alta probabilidad de disminución del precio. Nivel de riesgo elevado, requiere precaución. Recuerda siempre aplicar gestión de riesgos, y ten en cuenta que esto no es un consejo financiero. + Activar Top 100 Top 200 Top 300 @@ -223,6 +225,7 @@ Diagrama Capitalización Total Dominio de BTC + Vol. de 24h Cap. DeFi TVL en DeFi Entrada ETF @@ -486,6 +489,7 @@ Comisión El coste estimado del envío de una transacción en la red. (sin excluir Energía, Ancho de Banda y Tarifa Activa) Tarifa de activación + Esta dirección no está activa. Transferir tokens TRX o TRC-10 a una dirección de cuenta inactiva activará la cuenta. Recursos consumidos El bandwidth es la unidad que mide el tamaño de los bytes de transacción almacenados en la base de datos de la cadena de bloques. Cuanto más grande sea la transacción, más recursos de ancho de banda se consumirán.\n\nEnerge es la unidad que mide la cantidad de computación requerida por la máquina virtual TRON para realizar operaciones específicas en la red TRON.\n\nDado que las transacciones de contratos inteligentes requieren recursos informáticos para ejecutarse, cada transacción de contrato inteligente debe pagar la tarifa de energy. @@ -495,6 +499,8 @@ Las cuentas recién creadas en la cadena de bloques TRON están inactivas y no se pueden consultar ni explorar. Necesitan ser activadas.\n\nPara activar una cuenta inactiva, transfiera tokens TRX o TRC-10 a su dirección. Para activar una nueva cuenta en la cadena Tron, se requiere una cuota de 1 TRX No se puede transferir TRX a ti mismo No se puede transferir 0 %s + Cuenta No Activa + Las nuevas billeteras TRON requieren un depósito de al menos 1 TRX para activarse. Las billeteras inactivas pueden mantener y recibir tokens, pero no corregirán los saldos hasta que se activen. Pedido Enviar @@ -527,6 +533,9 @@ No hay cuenta adecuada No hay kit de evm adecuado Error de análisis de datos + Cadenas no compatibles: %s + Métodos no soportados: %s + Eventos no soportados: %s Petición no encontrada error No tienes ninguna dapps conectadas Solicitudes Pendientes @@ -690,6 +699,7 @@ Procesando Enviado Burned + Minted Aprobar Cambiado Falla @@ -802,6 +812,7 @@ Ajustes Seguridad Notificaciones + Experimental Moneda principal Idioma Tema @@ -816,10 +827,12 @@ vía E-mail Bloqueo automático Be Unstoppable + Aprende y domina criptografía a través de vídeos exclusivos. Conozca informalmente. Sé el primero en ver las cosas en las que trabajamos. Soporte personal Introduzca su nombre de cuenta de Telegram para iniciar un chat de asistencia personal con nuestro equipo. Nos pondremos en contacto contigo y comenzaremos a trabajar en tu problema tan pronto como lo veamos. Ya has solicitado un chat privado, encuentra en Telegram Cuenta + \@username Solicitado Pedido Nueva requisición @@ -840,16 +853,25 @@ 1 hora TEMA ESPECIALES DE OBJETO + MARKETS TAB + BALANCE TAB ACTUALIZAR SCREEN ICONO APP + Conversión de balance + Valor de Saldo Cambiar icono cerrará la aplicación + Ocultar Mercados + Ocultar Botones + Esta configuración oculta los botones Enviar, Recibir e Intercambiar en la pestaña Balance. Saldo Auto Ocultar Oculta automáticamente el balance cada vez que se abre la aplicación, independientemente de las preferencias anteriores. + Cambio de Precio % Valor de la moneda Valor Fiat Sobre la aplicacion Sitio Web Qué novedades hay + Versión de la Aplicación Configuración de Blockchain @@ -871,7 +893,13 @@ Ajustes de app Idioma, moneda, Apariencia … + Unstoppable no recopila datos personales que exponen su información privada, es decir, saldos de monedas o direcciones. Mientras recopilamos algunas estadísticas de uso de la interfaz de usuario, es sólo para entender nuestras tendencias de uso de la base de usuarios y de la aplicación. Esto puede desactivarse si lo desea. + La cartera no recoge ningún dato personal. + No hay cuentas de usuario o bases de datos almacenando datos de usuario. + Si se permite el monedero compartirá los hábitos de uso de la aplicación con el equipo imparable. Esto es para entender qué características están siendo utilizadas (o no) por nuestros usuarios. Siendo una aplicación enfocada a la privacidad, necesitamos alguna forma de evaluar nuestros esfuerzos y sin esto no tenemos ni idea de si las características que construimos están siendo usadas o no. + Compartir datos de UI + INTERNET Añadir Nuevo Añadido @@ -910,6 +938,7 @@ Las notificaciones para la aplicación del Monedero Unstoppable están desactivadas. Necesita activarlas para poder recibir alertas de cambio de precios. Aleatoriamente Indexación aleatoria + Deterministic Bip69 determinista Indexación Lexicográfica API de Blockchair @@ -965,6 +994,7 @@ Largo Plazo 6M Largo plazo + Auto Saldo Visión General del Mercado Lista de Seguimiento @@ -1008,6 +1038,7 @@ Hay 2 formatos de dirección de las carteras Bitcoin Cash pueden usar para recibir pagos entrantes:\n\n- TYPE 0 (más antiguo)\n- TYPE 145 (más reciente)\n\nMientras que el monedero imparable soporta ambos se recomienda usar un monedero Bitcoin Cash que funcione en formato TYPE 145. AÑADIR CONTRACTO + Experimental Las siguientes características son experimentales y deben utilizarse con precaución. Aunque hemos probado a fondo estas características usando nuestros propios fondos criptográficos, no podemos garantizar que funcionen como se espera en todos los casos posibles. Permite enviar Bitcoins que no se pueden gastar hasta la fecha establecida.\n\nEl receptor de dicha transacción debe utilizar el monedero Unstoppable.\n\nSólo el monedero Unstoppable puede identificar correctamente tales transacciones en la red Bitcoin, así como permitir que el receptor gaste esos Bitcoins después de que expire el período de bloqueo.\n\nSi eres un HODLer, puedes usar esta función para obligarte a retener tus Bitcoins enviándote dicha transacción a ti mismo.\n\nPor ser característica experimental, la cantidad máxima por transacción está limitada a 0.5 BTC. @@ -1115,6 +1146,7 @@ BIP32 Root Key Toca para mostrar la clave privada + Para hacer Claves privadas Clave Privada EVM @@ -1213,7 +1245,12 @@ Estadísticas Tweets Hoy + 1D + 7D + 1M 2 S + 3M + 6M 1A 2A 5A @@ -1264,6 +1301,11 @@ Cap. de Mercado Diluida En circulación Suministro total + K + M + B + T + Q Capitalización de Mercado / Proporción TVL La proporción del tope de mercado de la ficha de proyecto sobre su TVL. Volumen @@ -1304,6 +1346,7 @@ Datos Insuficientes No hay suficientes puntos de datos para mostrar el indicador EMA 1. Por favor, ajuste el período de tiempo para generar una vista de la línea media de movimiento. No hay suficiente punto para mostrar EMA 1. Tipo + Period Longitud RSI Longitud rápida Longitud lenta @@ -1369,6 +1412,7 @@ Titulares Proyecto TVL Proyecto TVL (Valor Total bloqueado) + M.Cap / TVL Ratio Ingresos del Proyecto Tarifa del proyecto Rango de Ingresos del Proyecto @@ -1417,15 +1461,29 @@ No hay datos Análisis de contratos inteligente Elementos de Alto Riesgo + Elementos de Riesgo Medio Arriesgado + Atención Requerida Desarrollado por De.Fi %d Artículos Indicadores técnicos + Recuerda siempre aplicar gestión de riesgos, y ten en cuenta que esto no es un consejo financiero. + sobrecomprado + sobrevendido + abajo + abajo + Las acciones con el activo son riesgosas. + Comenzando desde el %s + El activo está fuera del canal de bandas de Bollinger y %s. + RSI = %1$s. Esto también indica que el activo está %2$s. + Podría haber un fuerte movimiento hacia %s, por lo que es mejor esperar a que el precio del activo regrese al canal. + el activo estaba %s, pero ahora ha regresado al canal de Bandas de Bollinger. Esto indica una posible reversión de la tendencia. Mientras tanto, el RSI es %1$s, lo que aún indica que está %2$s. Este podría ser una señal muy fuerte para ingresar al mercado. Ten en cuenta que puede haber varios intentos de movimiento hacia %s después de regresar al canal, así que no olvides el manejo del riesgo. Mientras tanto, el RSI es %s, lo que también indica una reversión de la tendencia (el RSI cruzó el límite del 70\%%). El precio está volviendo a niveles neutrales; sin embargo, aún existe potencial para movimientos hacia arriba. Ten en cuenta que RSI = 50 y el centro de las Bandas de Bollinger son resistencias fuertes y posibles puntos de reversión de la tendencia. No olvides el manejo del riesgo. RSI = $s también confirma la ausencia de una tendencia fuerte. + el activo estaba en la zona de sobrecompra/sobreventa, pero en este momento el precio ha regresado al canal de las Bandas de Bollinger en la zona neutral. El RSI es %s, lo que también confirma la ausencia de una tendencia fuerte, por lo que en general el precio del activo se está moviendo hacia la media y es posible un movimiento adicional en cualquier dirección. En general, el precio del activo se está moviendo hacia la media y es posible que se produzca un movimiento en cualquier dirección. Por favor, toma nota: arriba @@ -1505,7 +1563,9 @@ Promedio de tiempo %d Artículos Súbditos de hoy + %s NFT ~%s por NFT + Royalty Fecha de inicio Seleccionar Tipo de Evento @@ -1521,6 +1581,7 @@ Personalizado Pagos Cancelar en masa + Mint Desconocido Ganadores @@ -1536,9 +1597,11 @@ Reportar El texto de error se copiará al portapapeles si decides reportarlo. + ÚNETE A UNSTOPPABLES Síguenos Bloqueado Usuario Pro + Unstoppable Pass Información adicional del token Para activar estos datos, debes obtener NFT de bronce de nivel \"Coin Info+\"\n\nTambién obtendrás acceso a los datos a continuación: Volumen y Rango DEX diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 6458a655775..e439e846ca4 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -1,7 +1,6 @@ - %1$s%2$s انصراف رونوشت بستن diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5182c4a19aa..f0b631ab8c8 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -149,7 +149,7 @@ Essayez CEX Sélectionnez l\'exchange centralisé auquel vous voulez vous connecter. Veuillez renseigner vos clés API (API Keys and Secrets) pour pouvoir vous connecter à votre exchange de cryptomonnaies. - API Key + Clé API Code Secret Vérification… @@ -203,6 +203,7 @@ Probabilité élevée de diminution du prix. Niveau de risque élevé, nécessite de la prudence. N\'oubliez pas d\'appliquer une gestion des risques, et notez que ceci n\'est pas un conseil financier. + Activer Top 100 Top 200 Top 300 @@ -224,6 +225,7 @@ Graphique Cap totale Pourcentage de Dominance du BTC + Vol. 24h Cap DeFi TVL en DeFi Entrées d\'ETF @@ -487,6 +489,7 @@ Frais Le coût estimé pour envoyer une transaction donnée sur le réseau (sans exclure les coûts d\'énergie, de bande passante et d\'activation) Frais d\'activation + Cette adresse n\'est pas active. Le transfert de jetons TRX ou TRC-10 vers une adresse de compte inactive activera le compte. Ressources consommées La bande passante est l\'unité qui mesure la taille des octets de transaction stockés dans la base de données blockchain. Plus la transaction est grande, plus la bande passante sera consommée.\n\nL\'énergie est l\'unité qui mesure le montant de calcul requis par la machine virtuelle TRON pour effectuer des opérations spécifiques sur le réseau TRON.\n\nÉtant donné que les transactions de contrats intelligents nécessitent des ressources informatiques pour être exécutées, chaque transaction de contrat intelligent nécessite le paiement de frais d\'énergie. @@ -530,6 +533,9 @@ Aucun compte approprié Aucun kit evm approprié Erreur d\'analyse des données + Chaînes non prises en charge : %s + Méthodes non prises en charge : %s + Événements non pris en charge : %s Erreur de requête non trouvée Vous n\'avez aucune dapp connectée Demandes en attente @@ -821,6 +827,7 @@ par e-mail Verrouillage automatique Soyez Unstoppable + Apprenez et maîtrisez les crypto-monnaies grâce à des vidéos exclusives. Faites connaissance avec nous de manière informelle. Soyez les premiers à voir les projets sur lesquels nous travaillons. Assistance Personnelle Entrez le nom de votre compte Telegram pour commencer une conversation de soutien personnelle avec notre équipe. Nous reviendrons vers vous et commencerons à travailler sur votre problème dès que nous le verrons. Vous avez déjà demandé une conversation privée, la trouver sur Telegram @@ -846,12 +853,16 @@ 1 heure Thème PARAMÈTRES DES TAB + TAB DES MARCHÉS + BALANCE TAB ÉCRAN DE LÉCHARGEMENT ICON APPLICATION Conversion du solde + Valeur du solde La modification de l\'icône fermera l\'application Masquer les marchés Masquer les boutons + Cette configuration masque les boutons Envoyer, Recevoir et Permuter dans l\'onglet Balance. Masquer le Solde Automatiquement Masque automatiquement le solde à chaque ouverture de l\'application, indépendamment des préférences précédentes. Variation de prix % @@ -868,6 +879,7 @@ Restaurer la sauvegarde Créer une nouvelle sauvegarde Fichier de sauvegarde + WALLETS AUTRE Restaurer Liste des contenus dans le fichier de sauvegarde. @@ -882,6 +894,7 @@ Langue, Devise, Apparence ... Unstoppable ne collecte pas de données personnelles exposant vos informations privées, telles que les soldes de coins ou les adresses. Bien que nous recueillions certaines statistiques d\'utilisation de l\'interface utilisateur, cela sert uniquement à comprendre notre base d\'utilisateurs et les tendances d\'utilisation de l\'application. Cela peut être désactivé si vous le souhaitez. + Le portefeuille ne recueille aucune donnée personnelle. Il n\'y a pas de comptes utilisateurs ni de bases de données stockant les données des utilisateurs. Si autorisé, le portefeuille partagera les habitudes d\'utilisation de l\'application avec l\'équipe d\'Unstoppable. Cela permet de comprendre quelles fonctionnalités sont utilisées (ou non) par nos utilisateurs. Étant une application axée sur la confidentialité, nous avons besoin d\'une manière d\'évaluer nos efforts, et sans cela, nous n\'avons aucune idée si les fonctionnalités que nous avons développées sont utilisées ou non. Partager les données UI @@ -1135,6 +1148,7 @@ BIP32 Root Key Appuyez pour afficher la clé privée + À faire Clés privées Clé privée EVM @@ -1289,6 +1303,8 @@ Cap. marché diluée Offre en Circulation Offre totale + K + M G MM P @@ -1456,6 +1472,8 @@ N\'oubliez pas d\'appliquer une gestion des risques, et notez que ceci n\'est pas un conseil financier. suracheté sursoldé + moins + plus Les actions liées à l\'actif comportent des risques. À partir du %s L\'actif est en dehors du canal de bandes de Bollinger et %s. @@ -1467,6 +1485,7 @@ Pendant ce temps, le RSI est %s, ce qui indique également un renversement de tendance (le RSI a franchi la limite à 70\%%). Le prix revient à des niveaux neutres, cependant, il existe encore un potentiel de mouvement à la hausse. Gardez à l\'esprit que le RSI = 50 et le milieu des bandes de Bollinger sont des résistances fortes et des points possibles de renversement de tendance. N\'oubliez pas la gestion des risques. Le RSI = $s confirme également l\'absence d\'une forte tendance. + L\'actif se trouvait dans la zone de surachat/survente, mais pour le moment, le prix est revenu dans le canal de Bandes de Bollinger dans la zone neutre. Le RSI est %s, ce qui confirme également l\'absence d\'une forte tendance, donc dans l\'ensemble, le prix de l\'actif se rapproche de la moyenne et un mouvement ultérieur est possible dans n\'importe quelle direction. En général, le prix de l\'actif se rapproche de la moyenne et un mouvement ultérieur est possible dans n\'importe quelle direction. Veuillez noter: au-dessus @@ -1580,6 +1599,7 @@ Signaler Le texte de l\'erreur sera copié dans votre presse-papiers si vous décidez de le signaler. + REJOIGNEZ LES UNSTOPPABLES Suivez-nous Verrouillé Utilisateur Pro diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 2045fba9aea..d68049e12d4 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -60,6 +60,8 @@ 공유 적용 금액 설정 + %1$s 이하나 %2$s 이상이어야 합니다. + 잘못된 정수 숫자 오류 N/A 어떤 @@ -201,6 +203,7 @@ 가격 하락의 높은 확률. 고위험 수준, 주의가 필요합니다. 언제나 위험 관리를 적용하는 것을 기억하세요. 이것은 금융 조언이 아님을 유의하세요. + 켜다 상위 100 상위 200 상위 300 @@ -369,7 +372,7 @@ 주소 유형 잠김 방송 - Memo (Tag) + 메모 (태그) 인식할 수 없음 이 주소는 관찰 중인 계정의 주소입니다 필요한 메모 (태그)를 제공하고 호환되는 네트워크 토큰만 보내십시오. 그렇지 않으면 소멸됩니다. @@ -490,6 +493,7 @@ 수수료 네트워크에서 거래하는 데 드는 예상 비용입니다. (energy, bandwidth 및 활성화 수수료 제외) 활성화 수수료 + 이 주소는 활성화되지 않았습니다. 비활성화된 계정 주소로 TRX 또는 TRC-10 토큰을 전송하면 계정이 활성화됩니다 소모된 자원 Bandwidth 은 블록체인 데이터베이스에 저장된 트랜잭션 바이트 크기를 측정하는 단위입니다. 거래가 클수록 대역폭 자원이 더 많이 사용됩니다.\n\nEnergy 는 TRON 가상 머신이 TRON 네트워크에서 특정 작업을 수행하기 위해 필요한 계산 양을 측정하는 단위입니다. \n\n스마트 계약 트랜잭션은 실행에 계산 자원이 필요하기 때문에 각 스마트 계약 트랜잭션에는 energy 수수료를 지불해야합니다. @@ -533,6 +537,9 @@ 적합한 계정이 없습니다. 적합한 evm 키트가 없습니다. 데이터 파싱 오류 + 지원되지 않는 체인: %s + 지원되지 않는 메서드: %s + 지원되지 않는 이벤트: %s 요청을 찾을 수 없음 오류 연결된 dapp이 없습니다. 보류 중인 요청 @@ -850,6 +857,8 @@ 1시간 주제 탭 설정 + 마켓 탭 + 잔고 탭 시작 화면 앱 아이콘 잔액 변환 @@ -857,6 +866,7 @@ 아이콘을 변경하면 애플리케이션이 종료됩니다. 마켓 숨기기 숨김 버튼 + 이 설정은 잔고 탭에서 보내기, 받기 및 스왑 버튼을 숨깁니다. 밸런스 자동 숨기기 앱이 열릴 때마다 잔고를 자동으로 숨깁니다. 이전 설정에 관계없이 적용됩니다. 가격 변경 % @@ -888,6 +898,7 @@ 언어, 통화, 외관... Unstoppable 는 코인 잔액이나 주소와 같은 개인 정보를 노출하는 개인 데이터를 수집하지 않습니다. UI 사용 통계를 수집하긴 하지만, 이는 사용자 기반 및 앱 사용 트렌드를 이해하기 위한 것입니다. 원하신다면 비활성화할 수 있습니다. + 이 지갑은 개인 데이터를 수집하지 않습니다. 사용자 계정이나 사용자 데이터를 저장하는 데이터베이스가 없습니다. 허용된 경우, 지갑은 앱 사용 습관을 Unstoppable 팀과 공유할 것입니다. 이는 사용자가 어떤 기능을 사용하고 있는지 (또는 사용하지 않는지) 이해하기 위한 것입니다. 개인 정보 보호를 중시하는 앱이지만, 우리의 노력을 평가할 방법이 필요합니다. 이를 통해 만든 기능이 사용되고 있는지 여부를 알 수 없기 때문입니다. UI 데이터 공유 @@ -1143,6 +1154,7 @@ BIP32 Root Key 개인 키 보기 + 할 일 개인 암호 EVM 개인 키 @@ -1593,6 +1605,7 @@ 보고 나중에 보고할 수 있도록 에러 텍스트가 클립보드에 복사됩니다. + JOIN UNSTOPPABLES 팔로우 잠김 Pro Users diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index cf3a214c9bf..2d2d67702f7 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -160,6 +160,7 @@ Mercados Buscar RECENTES + POPULAR PARÂMETROS DE MERCADO PARÂMETROS DE PREÇO PARÂMETROS DE REDE @@ -492,6 +493,7 @@ Taxa O custo estimado de envio de determinada transação na rede. (Sem excluir Eneregy, Bandwidth e Taxa de Ativação) Taxa de ativação + Este endereço não está ativo. A transferência de tokens TRX ou TRC-10 para um endereço de conta inativo irá ativar a conta. Recursos consumidos A bandwidth é a unidade que mede o tamanho dos bytes de transação armazenados no banco de dados blockchain. Quanto maior a transação, mais recursos de largura de banda serão consumidos.\n\nEnergy é a unidade que mede a quantidade de computação necessária pela máquina virtual TRON para realizar operações específicas na rede TRON.\n\nComo as transações de contrato inteligente exigem recursos de computação para executar, cada transação de contrato inteligente requer o pagamento da taxa de energy. @@ -535,6 +537,9 @@ Sem conta adequada Nenhum kit evm adequado Erro de análise de dados + Correntes não suportadas: %s + Métodos não suportados: %s + Eventos não suportados: %s Pedido não encontrado erro Você não tem nenhum Dapps conectado Solicitações Pendentes @@ -852,6 +857,8 @@ 1 hora TEMA DEFINIÇÕES DO TAB + TAB MARKETS + BALANCE TAB TELA DE INÍCIO ICONE DE APLICATIVO Conversão de saldo @@ -891,6 +898,7 @@ Linguagem, Moeda, Aparência … Unstoppable não coleta dados pessoais que exponham suas informações privadas, como saldos de moedas ou endereços. Embora coletemos algumas estatísticas de uso da interface do usuário, é exclusivamente para entender nossa base de usuários e tendências de uso do aplicativo. Isso pode ser desativado se você desejar. + A carteira não coleta nenhum dado pessoal. Não há contas de usuário ou bancos de dados armazenando dados do usuário. Se permitido, a carteira compartilhará os hábitos de uso do aplicativo com a equipe do Unstoppable. Isso é para entender quais recursos estão sendo usados (ou não) pelos nossos usuários. Sendo um aplicativo focado em privacidade, precisamos de alguma maneira de avaliar nossos esforços e sem isso não temos ideia se os recursos que construímos estão sendo utilizados ou não. Compartilhar Dados de UI @@ -1147,6 +1155,7 @@ Chave Raiz BIP32 Toque para mostrar a chave privada + Para fazer Chave Privada Chave Privada EVM @@ -1597,6 +1606,7 @@ Reportar O texto de erro será copiado para a área de transferência caso você decida reportá-lo. + JUNTE-SE EM REPARÁVEIS Siga a gente Bloqueado Usuários Pro diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 0f5011c7912..e9b9e7963a9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -185,14 +185,30 @@ Работает на DefiLlama API Обзор Новости + Монеты + Платформы + Пары Секторы Избранное Список избранного пуст. Топ токены Топ токенов по рыночной капитализации + Сигналы + Объем Рын. капитализация + TVL + Нижеследующие сигналы основаны на технических индикаторах ценового диапазона Боллинджера и RSI за последние приблизительно 30 дней. Эти сигналы алгоритмические и могут часто изменяться. + Высокая уверенность в повышении цен. + Вероятное увеличение цены в ближайшем будущем. + Нет чёткого тренда, рынок находится в равновесии. + Вероятное снижение цен в ближайшем будущем. + Высокая вероятность снижения цены. + Повышенный уровень риска, требует осторожности. Всегда помните о применении управления рисками, и обратите внимание, что это не финансовый совет. + Включить Топ 100 + Топ 200 + Топ 300 Топ 500 Лучшие рыночные пары Лучшие торговые пары по объему на каждой бирже @@ -209,9 +225,12 @@ Капитализация рынка всех протоколов на блокчейне %s График + Общая капитализация Доминирование BTC + Объём Капитализация DeFi TVL в DeFi + ETF приток Общая рыночная стоимость всех криптовалют. Историческое изменение соотношения рыночной капитализации биткойнов к остальным криптовалютным рынкам. \n\nОбычно, в этом случае биткойны доминируют над остальными тенденциями криптовалютного рынка наоборот. 24-часовой объем крипторынка. @@ -223,7 +242,14 @@ Этот токен еще не поддерживается У этого проекта нет токена + Общий чистый приток + Чистый приток (net inflow) ETF равен разнице между поступлениями и оттоками наличных средств. + Наивысшие активы + Наименьшие активы + Приток + Расход Все + Всего чистых активов Ничего не найдено Фильтры @@ -237,6 +263,8 @@ Ценовой период Торговые сигналы Изменение цены + 24 Часа + Полночь по UTC Блокчейны Обошел BTC Обошел ETH @@ -256,6 +284,7 @@ Активно продавать Продавать Риски + Показывают рост Топ 100 Топ 250 Топ 500 @@ -290,8 +319,12 @@ 1 Неделя 2 Недели 1 Месяц + 3 Месяца 6 Месяцев 1 Год + Вручную + Показывают рост + Теряют в цене Наивысшей кап. Наименьшей кап. @@ -310,6 +343,7 @@ до %s Синхронизация… Поиск транзакций... + %s tx Синхронизация… %s%% Отключена монета %s По балансу @@ -457,6 +491,7 @@ Комиссия Ориентировочные затраты на отправку данной транзакции по сети (без учёта energy, Bandwidth и комиссии за активацию) предполагаются Комиссия за активацию + Этот адрес не активен. Перевод TRX или токенов TRC-10 на неактивный адрес активирует аккаунт. Расходуемые ресурсы Bandwidth - это единица, которая измеряет размер байт транзакции, хранящихся в базе данных блокчейна. Чем больше транзакция, тем больше bandwidth будет потребляться.\n\nEnergy — это единица, измеряющая количество вычислений, требуемых виртуальной машиной TRON для выполнения конкретных операций в сети TRON.\n\nПоскольку транзакции смарт-контракта требуют выполнения вычислительных ресурсов, каждая сделка по контракту требует оплаты energy комиссии. @@ -466,6 +501,8 @@ Недавно созданные учетные записи в блокчейне TRON неактивны и не могут быть запрошены или изучены. Они должны быть активированы.\n\nАктивация новой учетной записи в цепочке Tron требует комиссию в размере 1 TRX. Для активации достаточно просто перевести токены TRX или TRC-10 на неактивный адрес аккаунта Невозможно отправить TRX самому себе Невозможно отправить 0 %s + Аккаунт не активен + Новым кошелькам TRON требуется депозит как минимум 1 TRX для активации. Неактивные кошельки могут принимать и хранить токены, но не будут корректировать балансы до момента активации. Запрос Отправить @@ -498,6 +535,9 @@ Нет подходящей учетной записи Нет подходящего evm kit Ошибка разбора данных + Неподдерживаемые чейны: %s + Неподдерживаемые методы: %s + Неподдерживаемые события: %s Запрос не найден У вас нет подключенных dapps Ожидающие запросы @@ -789,10 +829,12 @@ по электронной почте Блокировка Продолжить + Изучайте и осваивайте криптовалюты с помощью эксклюзивных видео. Узнавайте о нас неформально. Будьте первыми, кто увидит то, над чем мы работаем. Персональная поддержка Введите имя вашей учетной записи Telegram, чтобы начать чат с нашей командой. Мы свяжемся с вами и начнем работать над вашей проблемой, как только увидим ее. Вы уже запросили приватный чат, найдите его в Telegram Аккаунт + \@username Запрошено Запрос Новый запрос @@ -813,16 +855,25 @@ 1 час ТЕМА НАСТРОЙКИ ВКЛАДКИ + ВКЛАДКА РЫНКИ + ВКЛАДКА БАЛАНС ЗАПУСК ЭКРАНА ИКОНКА ПРИЛОЖЕНИЯ + Конвертация баланса + Значение баланса Изменение значка закроет приложение + Скрыть рынки + Скрыть кнопки + Эта конфигурация скрывает кнопки Отправить, Получить и Обмен на вкладке баланса. Автоскрытие баланса Автоматически скрывает баланс при открытии приложения, независимо от предыдущих настроек. + Изменение цены % Токен значение Фиатное значение О приложении Веб-сайт Что нового + Версия приложения Настройки блокчейна @@ -844,6 +895,11 @@ Настройки приложения Язык, валюта, внешний вид + Unstoppable не собирает персональные данные, которые могут раскрывать вашу частную информацию, такую как балансы монет или адреса. Мы собираем некоторую статистику использования интерфейса исключительно для понимания нашей пользовательской базы и тенденций использования приложения. Эта функция может быть отключена по вашему желанию. + Кошелек не собирает личные данные. + Здесь нет пользовательских аккаунтов или баз данных для хранения данных пользователей. + Если разрешено, кошелек будет делиться с командой Unstoppable информацией о привычках использования приложения. Это необходимо для понимания, какие функции используются (или нет) нашими пользователями. В качестве приложения, ориентированного на конфиденциальность, нам нужен способ оценить наши усилия, и без этого мы не сможем определить, используются ли построенные нами функции или нет. + Поделиться данными UI ИНТЕРНЕТ @@ -851,6 +907,7 @@ Добавлено Режим синхронизации + RPC Url Добавить источник RPC По названию Базовая авторизация (опц.) @@ -886,6 +943,7 @@ Детерминированный Deterministic Bip69 Лексикографическая индексация + Blockchair API Быстрый, Конфиденциальный, Централизованный API + Блокчейн Блокчейн @@ -1087,8 +1145,10 @@ Этот ключ предназначен для всех EVM-совместимых блокчейнов. Не передавайте его никому. Нажмите, чтобы показать приватный ключ + BIP32 Root Key Нажмите, чтобы показать приватный ключ + Выполнить Приватные ключи Приватный ключ EVM @@ -1143,6 +1203,7 @@ Символ Код токена Десятичные знаки + ТИПЫ ТОКЕНОВ УЖЕ ДОБАВЛЕНО Адрес контракта @@ -1186,6 +1247,7 @@ Аналитика Твиты СГД + @@ -1503,6 +1565,7 @@ Средняя оценка за все время %d Элементов Продажи за сегодня + %s NFT ~%s за NFT Вознаграждение Дата старта @@ -1523,6 +1586,8 @@ Минт Неизвестная + Показывают рост + Теряют в цене Новости %dд назад %dч назад @@ -1534,9 +1599,11 @@ Пожаловаться Сообщение об ошибке будет скопировано в ваш буфер обмена данными на случай, если вы решите о ней сообщить. + Be Unstoppable Мы в соцсетях Заблокировано Pro-пользователь + Unstoppable Pass Дополнительная информация о токене Чтобы включить эти данные, вы должны получить бронзовый уровень UW NFTs “Coin Info+”\n\nТакже вы получите доступ к данным ниже: DEX объем и рейтинг diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e04de569678..f5a51812f7f 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -8,6 +8,7 @@ Kapat Yükleniyor... Yeniden başlat + ASKIYA ALINDI GERİ ALMA Göster Gizle @@ -48,7 +49,9 @@ Tarayıcı Sil Daha fazla bilgi edin + Activate kaydol + Activating API Anahtarı alın Giriş yapmak Üye olmak @@ -57,6 +60,8 @@ Paylaş Uygula Miktarı Ayarla + %1$s\'den küçük veya %2$s\'den büyük olamaz + Hatalı tam sayı numarası Hata N/A Herhangi @@ -67,6 +72,7 @@ Bu cüzdan, gizli sözcükler listesinde ve/veya bir şifrede standart olmayan bir karakter kullanıyor gibi görünüyor. Bir bakiye veya işlem göremiyorsanız lütfen bilgi için aşağıya bakınız.\n\nDAHA FAZLA BİLGİ ALMAK İÇİN TIKLAYINIZ Bu standart olmayan bir cüzdandır. \n\nDAHA FAZLA BİLGİ ALMAK İÇİN TIKLAYIN + Be Unstoppable Varlıkları Serbest Bırak Kendinizi kilitlemeyin ve başkalarının bunu sizin için yapmasına izin vermeyin. Sınırları Kaldırın @@ -167,29 +173,62 @@ En Düşük Fiyat Sıralama şekli Total Cap + BTC Hakimiyeti 24 saat hacim + TVL in DeFi + DeFi Cap Hepsini Gör CoinGecko API İle Güçlendirildi Horizontal API Tarafından Desteklenmektedir DefiLlama API İle Güçlendirildi İzleme Haberler + Coin\'ler + Platformlar + Çiftler Sektörler İzleme Listesi İzleme listeniz boş. En iyi Coinler P. Değerine Göre En Iyi Coinler + Sinyaller + Hacim Piyasa Değeri + TVL + Aşağıdaki sinyaller yaklaşık olarak son 30 gün boyunca Bollinger Bantları ve RSI teknik fiyat göstergelerine dayanmaktadır. Bu sinyaller algoritmiktir ve sık sık değişebilir. + Fiyat artışında yüksek güven. + Yakın gelecekte muhtemel fiyat artışı. + Net bir trend yok, piyasa denge durumunda. + Yakın gelecekte muhtemel fiyat düşüşü. + Fiyatın yüksek olasılıkla düşeceği. + Yüksek risk seviyesi, dikkat gerektirir. + Her zaman risk yönetimini uygulamayı unutmayın ve bu finansal tavsiye değildir. + + Top 100 + Top 200 + Top 300 + Top 500 + En İyi Piyasa Çiftleri Her borsada hacme göre en üstte olan işlem çiftleri + En İyi Piyasa Çiftleri En İyi Sektörler Sektörler En İyi Platformlar En İyi Blok Zinciri Platformları Leading blockchain platforms by the cumulative market of projects built on top. + Protocols: %s + %s Ekosistemi %s zincirindeki tüm protokollerin piyasa değeri + Chart + Toplam Piyasa Değeri + BTC Hakimiyeti + 24s Hacim + DeFi Cap + TVL in DeFi + ETF Girişi Tüm kripto paraların toplam piyasa değeri. The historical change in ratio between the market cap of Bitcoin to the rest of the cryptocurrency markets. \n\nTypically, when Bitcoin dominance trending higher the rest of the crypto market trends down and vice versa. Kripto piyasa 24 saatlik işlem hacmi. @@ -201,7 +240,14 @@ Bu kripto para henüz desteklenmiyor This project doesn’t have a coin + Toplam Net Giriş + Bir ETF\'nin net girişi, nakit girişlerinin çıkışlardan çıkarılmasıyla eşittir. + En Yüksek Varlıklar + En Düşük Varlıklar + Giriş + Çıkış Hepsi + Toplam Net Varlıklar Sonuç bulunamadı Filtreler @@ -215,6 +261,9 @@ Fiyat Periyodu Ticaret Sinyalleri Fiyat Değişimi + 24 Saat + Gece Yarısı UTC + Blockchains BTC\'yi Geride Bıraktı ETH\'yi Geride Bıraktı BNB\'yi Geride Bıraktı @@ -233,18 +282,53 @@ Kuvvetli Satış Sat Riskli + Kazanlar + Top 100 + Top 250 + Top 500 + Top 1000 + Top 1500 Sonuçları Göster Sonuçları Göster: %d + < 5M + 5M - 20M + 20M - 100M + 100M - 1B + 1B - 5B + > 5B + < 10M + 10M - 40M + 40M - 200M + 200M - 2B + 2B - 10B + > 10B + < 50M + 50M - 200M + 200M - 1B + 1B - 10B + 10B - 50B + > 50B + < 500M + 500M - 2B + 10B - 100B + 100B - 500B + > 500B 1 Gün 1 Hafta 2 Hafta 1 Ay + 3 Ay 6 Ay 1 Yıl + Manuel + Kazanlar + Kaybedenler En Yüksek En Düşük + %s Markets + Multi-Chain Hesaptan Çek Bakiye @@ -257,6 +341,7 @@ %s kadar Eşitleniyor… İşlemler aranıyor ... + %s tx Eşitleniyor...%s%% engelli madeni para %s Bakiye @@ -286,6 +371,8 @@ Miktarı Ayarla Adres tipi Kilitli + Yayınlama + Memo (Tag) Tanıyamıyorum Bu adres izlenen hesabın adresidir Gerekli Memo (Etiket) sağlayın ve yalnızca ağ uyumlu jetonları gönderin. Diğerleri kaybolur. @@ -316,6 +403,7 @@ Etkinleştirildi Etkisizleştirildi Onayla + Domain Gönderdiğiniz Tutar Alan @@ -405,6 +493,7 @@ Masraf Ağda belirli bir işlemi göndermenin tahmini maliyeti. (Enerji, Bant Genişliği ve Aktivasyon Ücreti hariç) Aktivasyon ücreti + Bu adres aktif değil. TRX veya TRC-10 jetonlarını aktif olmayan bir hesap adresine transfer etmek, hesabı aktif hale getirecektir. Tüketilen Kaynaklar Band Width, blockchain veritabanında saklanan işlem baytlarının boyutunu ölçen birimdir. İşlem ne kadar büyük olursa, o kadar fazla bant genişliği kaynağı tüketilir.\n\nEnergy, TRON sanal makinesinin TRON ağında belirli işlemleri gerçekleştirmek için ihtiyaç duyduğu hesaplama miktarını ölçen birimdir.\n\nAkıllı sözleşmeden beri işlemlerin yürütülmesi için bilgi işlem kaynakları gerekir, her akıllı sözleşme işleminin energy ücretini ödemesi gerekir. @@ -414,6 +503,8 @@ TRON blok zincirinde yeni oluşturulan hesaplar etkin değildir ve sorgulanamaz veya araştırılamaz. Etkinleştirilmeleri gerekiyor.\n\nTRX veya TRC-10 jetonlarını etkin olmayan bir hesap adresine aktarmak, hesabı etkinleştirir. Tron zincirinde yeni bir hesabın etkinleştirilmesi 1 TRX ücret gerektirir TRX kendinize aktarılamıyor 0 %s aktarılamıyor + Hesap aktif değil + Yeni TRON cüzdanları aktif hale gelmek için en az 1 TRX yatırılmasını gerektirir. Aktif olmayan cüzdanlar, tokenları alabilir ve saklayabilir, ancak etkinleştirilene kadar bakiyeleri güncellemez. İstek Gönder @@ -435,6 +526,7 @@ Yeni bağlantı Bağlantı kesiliyor İmza Talebi + Domain İmza için mesaj Lütfen doğrulamak için bir mesajı imzalayın kaydol @@ -445,6 +537,9 @@ Uygun hesap yok Uygun evm kiti yok Veri ayrıştırma hatası + Desteklenmeyen zincirler: %s + Desteklenmeyen yöntemler: %s + Desteklenmeyen olaylar: %s İstek bulunamadı hatası Bağlı dapp\'niz yok bekleyen istekler @@ -536,6 +631,7 @@ (tah) (dk) (azami) + Coin Rota bulunamadı Ödediğiniz Kazandığınız @@ -580,6 +676,10 @@ Sen Onaylıyorsun Sen iptal et + Erişimi Aç + Aşağıdaki miktar için erişime izin ver + Akıllı bir sözleşmeye, adınıza token ticareti yapabilmesi için izin verin ve izin verilen miktarı belirtin. Bakiyenize herhangi bir etkisi olmaz, ancak onay için küçük bir ücret alınır.\n\nGelecekteki işlemler için daha yüksek bir miktarın önceden onaylanması, talep üzerine onaylara göre maliyet açısından daha avantajlıdır. + Sınırsız Ödenek Bir borsanın, token takaslarını yürütürken kullanıcının adına harcayabileceği ödenek miktarı. Fiili bir takas işleminin gerçekleşmesinde yeterli ödenek gereklidir. @@ -602,6 +702,8 @@ Tamamlandı İşleniyor Gönderildi + Burned + Minted Onayla Takas Edildi Başarısız @@ -614,6 +716,7 @@ sınırsız Hepsi Blok zincirine göre filtrele + Coin Kişiler Tüm Blok Zincirleri Tüm paralar @@ -693,6 +796,7 @@ Gönderici bu fonları %s.\n\n tarihte sona erecek şekilde bir harcama kilidiyle gönderdi. Endişelenmeyin, alınan Bitcoin\'ler zaten sizindir ancak kilitleme süresi sona erene kadar bunları harcayamazsınız. Gönderici bu fonları belirtilen tarihte sona erecek şekilde bir harcama kilidiyle gönderdi.\n\nEndişelenmeyin, alınan Bitcoin\'ler zaten sizindir ancak kilitleme süresi sona erene kadar bunları Bitcoin ağında harcayamazsınız. + Yayın Bu miktarı içeren işlem yayınlandı ancak henüz ağ tarafından kabul edilmedi. Çifte Harcama Çifte Harcama Riski! Blockchain\'de, bu işlemde kullanılan girdileri harcamaya çalışan başka bir işlem var. Ağ tarafından yalnızca bir işlem kabul edilecektir @@ -726,9 +830,13 @@ Telegram aracılığıyla E-posta yoluyla Otomatik kilit + Be Unstoppable + Özel videolar aracılığıyla kripto para birimini öğrenin ve ustalaşın. Bizi resmi olmayan bir şekilde tanıyın. Üzerinde çalıştığımız şeyleri ilk gören siz olun. Kişisel Destek + Takımımızla kişisel destek sohbeti başlatmak için Telegram hesap adınızı girin. Sorununuzu gördüğümüzde hemen size geri dönecek ve çalışmaya başlayacağız. Zaten özel bir sohbet talep ettiniz, bunu Telegram\'da bulun Hesap + \@username Talep Edildi İstek Yeni istek @@ -749,16 +857,25 @@ 1 saat TEMA TAB AYARLARI + MARKETS TAB + BALANCE TAB BAŞLANGIÇ EKRANI UYGULAMA IKONLARI + Bakiye çevrimi + Bakiye değeri Simgeyi değiştirmek uygulamayı kapatır + Piyasaları Gizle + Düğmeleri Gizle + Bu yapılandırma, Bakiye sekmesinde Gönder, Al ve Değiştir düğmelerini gizler. Denge Otomatik Gizleme Uygulama her açıldığında, önceki tercihlere bakılmaksızın bakiyeyi otomatik olarak gizler. + Fiyat Değişimi % Para değeri Fiat Değeri Uygulama Hakkında Web sitesi Neler yeni + Uygulama Sürümü Blockchain Ayarları @@ -780,12 +897,19 @@ Uygulama Ayarları Dil, Para Birimi, Görünüm... + Unstoppable, coin bakiyelerinizi veya adreslerinizi açığa çıkaran kişisel verileri toplamaz. Biraz kullanıcı arayüzü kullanım istatistikleri topluyoruz, ancak bunlar yalnızca kullanıcı tabanımızı ve uygulama kullanım eğilimlerini anlamak içindir. İsterseniz bunu devre dışı bırakabilirsiniz. + Cüzdan herhangi bir kişisel veri toplamaz. + Kullanıcı hesapları veya kullanıcı verilerini depolayan veritabanları yoktur. + İzin verilirse, cüzdan, Unstoppable ekibiyle uygulama kullanım alışkanlıklarını paylaşacak. Bu, kullanıcılarımızın hangi özellikleri kullandığını (veya kullanmadığını) anlamak için. Gizliliğe odaklanan bir uygulama olarak, çabalarımızı değerlendirmenin bir yolu olmalı ve bu olmadan, oluşturduğumuz özelliklerin kullanılıp kullanılmadığını bilmiyoruz. + UI Verilerini Paylaş + INTERNET Yeni ekle Eklendi Senkron Modu + RPC Url RPC Kaynağı Ekle İsim Basic Auth (optional) @@ -818,8 +942,10 @@ Unstoppable Cüzdan uygulaması için bildirimler devre dışı bırakıldı. Fiyat değişikliği uyarıları alabilmek için Bildirimler\'i açmanız ve arka plan uygulaması yenilemesine izin vermeniz gerekir. Karıştır Rastgele Dizinleme + Deterministic BIP69 Lexicographical Dizinleme + Blockchair API Hızlı, Özel, Merkezileştirilmiş API + Blockchain Blok zincirine göre filtrele @@ -850,6 +976,7 @@ Bu uygulamaya güç veren kodda, uygulamanın arızalanmasına neden olabilecek keşfedilmemiş yazılım sorunları olabilir. Paylaş + Be Unstoppable Bizimle İletişime Geçin @@ -1025,13 +1152,16 @@ Bu anahtar, tüm EVM uyumlu blok zincirleri içindir. Onu kimseyle paylaşmayın. Özel anahtarı göstermek için dokunun + BIP32 Root Key Özel anahtarı göstermek için dokunun + Yapılacak Gizli Anahtar EVM Özel anahtar Ilgili cüzdan içinde EVM tabanlı kripto, yani Ethereum, Binance Smart Chain vb. Üzerinde tam kontrol sağlar. İlgili cüzdandaki varlıklar üzerinde tam kontrol sağlar. + Account Extended Private Key Ilgili cüzdan içinde Bitcoin ve diğer UTXO tabanlı kriptolar üzerinde tam kontrol sağlar, yani Litecoin, Bitcoin Cash, Dash vb. Kurtarma ifadenizi asla kimseyle paylaşmayın. Unstoppable ekip asla kurtarma ifadenizi istemez. @@ -1080,6 +1210,7 @@ Sembol Coin Kodu Ondalıklar + COIN ÇEŞİTLERİ ÇOKTAN EKLENMİŞ GÖRÜNÜYOR Sözleşme Adresi @@ -1121,28 +1252,40 @@ Fiyat Marketler Analitik + Tweets Bugün + 1G 7G 1A 2H 3A 6A + 1Y + 2Y + 5Y Hepsi Marketler İşlem Hacmi + Önemli Sahipler İlk 10 cüzdanda tutulan token sayısı. Kaliteli projeler genellikle geniş bir şekilde dağıtılmış tokene sahiptir. Denetimler Denetim raporu yok + Defiyield.app tarafından desteklenmektedir + Sorunlar: %d Yatırımcı Verileri Filtreler + Bitcointreasuries.net tarafından desteklenmektedir Raporlar Yatırılan Fonlar Gizlilik Yavaş Ortadüzey Hızlı + Çıkarım Merkezi Merkezi olmayan + El koyma direnci + Sansür direnci Denetimler 24 Saatlik Aralık Hakkında @@ -1150,9 +1293,13 @@ Kategori Kategoriler Kişiler + Blockchains + BIPs Coin çeşitleri + Bağlantılar Kılavuzu Web sitesi + Whitepaper Twitter mevcut değil Henüz tweet yok Alıntılandı%s @@ -1163,6 +1310,12 @@ Seyreltilmiş P. Değeri Dolaşımda Toplam arz + K + M + B + T + Q + MCap / TVL Ratio Proje tokenının piyasa değeri ile TVL\'si üzerinden oranı. Birim Veri Yok @@ -1179,15 +1332,19 @@ Daha Fazla Oku Başlangıç ​​tarihi Kilitlenen Toplam Değer + TVL Rank Diğer protokoller arasındaki sıralama, TVL değerinin USD cinsinden değerine dayanmaktadır. MCap / TVL Ratio Proje tokenının piyasa değeri ile TVL\'si üzerinden oranı. Kredi teminatı veya likidite havuzu şeklinde platforma yatırılan sermaye. + %s Contract + BEP2 Symbol En Üst Cüzdanlar Yukarıdaki grafik, ilk 10 cüzdan tarafından tutulan dolaşımdaki tüm tokenlerin \%%\'sini göstermektedir. \%% ne kadar düşük olursa, madeni para o kadar fazla dağıtılır. ilk 10 sahibinde Toplam Sahip: %s Önderlik + Get access to advanced wallet features by holding Unstoppable NFTs. [%s]\nBulunamadı Göstergeler Hareketli Ortalamalar @@ -1264,6 +1421,7 @@ Sahipler Proje TVL Proje TVL (Toplam Değer) + M.Cap / TVL Ratio Proje Geliri Proje Ücreti Proje Gelir Sıralaması @@ -1310,23 +1468,69 @@ Al Tarafsız Veri Yok + Smart Contract Analysis + Yüksek Riskli Ögeler + Orta Riskli Ögeler Riskli + İlgilenmeniz Gerekiyor De.Fi tarafından desteklenmektedir %d adet Teknik Göstergeleri + Her zaman risk yönetimini uygulamayı unutmayın ve bu finansal tavsiye değildir. + aşırı alım + aşırı satım + aşağı + yukarı + Varlık ile yapılan işlemler risklidir. + %s\'den başlayarak + Varlık, Bollinger Band kanalı dışında ve %s. + RSI = %1$s, Bu aynı zamanda varlığın %2$s olduğunu gösterir. + Güçlü bir %s yönlü hareket olabilir, bu yüzden varlık fiyatının kanala dönmesini beklemek daha iyi olur. + varlık %s idi, ancak şimdi Bollinger Band kanalına geri döndü. Bu, olası bir trend dönüşünü gösterir. + Bu arada, RSI %1$s, hala %2$s olduğunu gösteriyor. + Bu piyasaya giriş için çok güçlü bir sinyal olabilir. Kanala dönüşten sonra %s yönlü hareketin birkaç denemesi olabileceğini unutmayın, bu yüzden risk yönetimini unutmayın. + Bu arada, RSI %s, bu da bir trend dönüşünü gösteriyor (RSI 70\%% sınırını geçti). + Fiyat nötr seviyelere geri dönüyor, ancak hala yukarı yönlü hareket potansiyeli var. RSI = 50 ve Bollinger Bantlarının ortası güçlü dirençler ve olası trend dönüş noktalarıdır. Risk yönetimini unutmayın. + RSI = $s ayrıca güçlü bir trendin olmadığını doğruluyor. + varlık aşırı alım/aşırı satım bölgesindeydi, ancak şu anda fiyat nötr bölgedeki Bollinger Band kanalına geri döndü. RSI = %s ayrıca güçlü bir trendin olmadığını doğruluyor, bu nedenle genel olarak varlık fiyatı ortalama yapmaya doğru hareket ediyor ve daha fazla hareket herhangi bir yönde mümkün olabilir. + Genel olarak, varlık fiyatı ortalama hareket ediyor ve daha fazla hareket herhangi bir yönde mümkün olabilir. + Lütfen dikkate alın: + yukarıda + aşağıda + büyüme + azalış + EMA 200. Genel duygu ve trendi belirler. Varlığın günlük fiyatı EMA (%1$s) \'nin %2$s\'den geçtiği yerde bulunuyor. Bu, genel olarak varlığın %3$s olduğu anlamına gelir. + yukarıda + aşağıda + MACD. Ortalama fiyat değişimini dikkate alarak trendin gücünü değerlendirir. Histogramın günlük değeri %1$s (%2$s). Varlığın fiyatı genel olarak %3$s hareket edebilir. Teknik Göstergeleri + Bollinger Bantları + RSI stratejisini kullanarak işlem sinyallerini belirliyoruz. Tüm hesaplamalar günlük mum grafiklerine dayanmakta ve ortalama uzun vadeli bir strateji için tavsiyeler sunmaktadır. Stratejinin özü, varlık fiyatının Bollinger Bantları kanalından çıkarak aşırı seviyelere ulaşması ve RSI\'nin aşırı alım/aşırı satım bölgesinde olması gerektiğidir. Fiyat kanala geri döndükten sonra, fiyatın ortalama değerlere geri dönme veya kanalı diğer taraftan kırmaya yönelik yüksek bir olasılığı vardır. Stratejinin güçlü piyasa hareketleri sırasında birkaç yanlış sinyal verebileceğini unutmayın, doğru bir sinyal ortaya çıkmadan önce.\n\nLütfen ticarette risk yönetimini uygulamanın çok önemli olduğunu ve piyasa durumu değişirse kayıpları kesmeyi unutmayın! + Detayları Göster + Detayları Gizle Kuvvetli Al Al Tarafsız Sat Kuvvetli Satış Riskli + Token Tespit Ediciler + Genel Tespit Ediciler + Sorunlar: %d + Activate Cüzdanı Adres İmza için mesaj + Aboneliğinizi etkinleştirmek için bu mesajı imzalamanız gerekiyor. + Cüzdan adresinizin premium özelliklere aboneliği yok, aboneliği etkinleştirmek için satın almanız gerekiyor. Premium Ayrıcalıkları Kripto Para Analitiği + Her token hakkında kapsamlı piyasa ve zincir içi istatistiklere erişin. + Fiyat Trend Göstergeleri + Teknik analiz göstergelerine dayanarak yükselen tokenları keşfedin. Kişisel Destek + Kişisel yardım için ekibimizle doğrudan Telegram üzerinden iletişime geçin. + Get Premium + I already have Premium Ortalama 7G Ortalama 30G Son İndirim @@ -1368,7 +1572,9 @@ Tüm Zamanların Ortalaması %d adet Bugünün Satıcıları + %s NFT NFT başına ~%s + Royalty Başlangıç ​​tarihi Etkinlik Türü Seç @@ -1384,8 +1590,11 @@ Özel Ödeme Toplu İptal + Mint Bilinmeyen + Kazanlar + Kaybedenler Haberler %dg önce %dsa önce @@ -1397,15 +1606,27 @@ Şikayet Et Bildirmeye karar verirseniz hata metni clipboardnıza kopyalanır. + KATIL UNSTOPPABLES Bizi Takip Et Kilitli + Pro Users + Unstoppable Pass + Additional Token Info + To enable this data you should get bronze level UW NFTs “Coin Info+”\n\nAlso you get access to data below: + DEX Volume and Rank + DEX Liquidity and Rank + Active Addresses İşlem Sayısı + Transaction Volume Doğrulanıyor... Çok Yakında + Activate + Activate the Pass Mountain Yak - Go borderless. Will show you important market data, analytical tools, and useful charts based on on-chain data that will help give you a clear view of projects Türü Seç Henüz öğe etkinliği yok + Bu widget\'ın düzgün çalışması için Otomatik Başlatmayı etkinleştirmelisiniz. Android anahtar deposu hatası Android cihazınızın kilidi değiştirildiğinden cüzdan bilginizi tutan şifreli dosya artık geçersiz diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index f560ff04025..b4e5b4dfdcc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -203,6 +203,7 @@ 价格下跌的高概率. 风险水平升高,需要谨慎. 请记住始终要进行风险管理,并注意这不是财务建议 + 打开 前100名 Top 200 Top 300 @@ -281,6 +282,7 @@ 强烈建议卖出 出售 有风险 + 涨幅最大者 前100名 前250名 前500名 @@ -487,6 +489,7 @@ 费用 估算在网络上发送特定交易所需的成本,包括能源、带宽和激活费 激活费 + 此地址未激活。传输TRX或 TRC-10代币到非活动帐户地址将激活该帐户。 消耗的资源 Bandwidth 是衡量存储在区块链数据库中的交易字节大小的单位。 交易越大,消耗的带宽资源就越多。\n\nEnergy 是衡量波场虚拟机在波场网络上执行特定操作所需计算量的单位。\n\n自智能合约 交易需要计算资源来执行,每笔智能合约交易都需要支付 energy费用。 @@ -824,6 +827,7 @@ 通过电子邮件 自动锁定 Be Unstoppable + 通过独家视频学习和掌握加密。非正式地了解我们。成为第一个看看我们正在工作的事情。 个人支持 请输入您的 Telegram 帳號名稱,開始与我們的团队的個人支援聊天。 一旦我们看到这个问题,我们就会回到您的面前。 您已经请求了一个私聊,在Telegram 上找到它 @@ -849,6 +853,8 @@ 1 小时 主题 TAB设置 + 市场标签 + 余额标签 局域网SCREEN 应用图标 余额转换 @@ -856,6 +862,7 @@ 更改图标将关闭应用程序 隐藏市场 隐藏按钮 + 此配置隐藏平衡选项卡上的发送、接收和交换按钮。 自动隐藏余额 每次打开应用程序时自动隐藏平衡,不管先前的偏好设置。 价格变化 % @@ -887,6 +894,7 @@ 语言、 货币、 外观 ... Unstoppable 不收集暴露您私人信息的个人数据,例如币余额或地址。虽然我们收集了一些用户界面使用统计数据,但这仅用于了解我们的用户群和应用程序使用趋势。如果您希望,可以禁用此功能。 + 钱包没有收集任何个人数据。 我们没有用户账户或存储用户数据的数据库。 如果允许,钱包将与不可阻挡团队分享应用程序使用习惯。这是为了了解我们的用户正在使用哪些功能(或未使用)。作为一个关注隐私的应用程序,我们需要一种评估我们努力的方式,如果没有这个,我们就无法知道我们构建的功能是否被使用。 共享界面数据 @@ -1138,6 +1146,7 @@ BIP32 Root Key 点击显示私钥 + 待办 私钥 EVM 私钥 @@ -1461,6 +1470,10 @@ 请记住始终要进行风险管理,并注意这不是财务建议 已购买过期的 超价 + down + up + 资产的行动是有风险的。 + 从 %s 开始 资产不属于Bollinger频道和 %s。 RSI = %1$s,这也表明该资产为%2$s. 可能会有强烈的%s向动,因此最好等待资产价格回到通道中。 @@ -1584,6 +1597,7 @@ 报告 如果您决定报告错误文本,将复制到剪贴板。 + 加入未加入的 关注我们 锁住 专业用户 diff --git a/core/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml index cd9bbb5cba8..533e28f0bd2 100644 --- a/core/src/main/res/values-es/strings.xml +++ b/core/src/main/res/values-es/strings.xml @@ -4,5 +4,7 @@ Ayer Inmediato Dentro de %s + %d h. + %d min. %d seg. diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml index 93019484e92..6191c5ace31 100644 --- a/core/src/main/res/values-fr/strings.xml +++ b/core/src/main/res/values-fr/strings.xml @@ -4,4 +4,7 @@ Hier Instantané Dans la limite de %s + %d h. + %d min. + %d sec. diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index 69fe2dc7bb7..dc6ba564c87 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -1,6 +1,6 @@ Unstoppable wallet is purposely built as a decentralized management tool for cryptocurrencies. -It is engineered to serve privacy-conscious individuals looking to manage and invest in cryptocurrencies in a sovereign and professional manner. +It is engineered to serve privacy-conscious individuals looking to manage and invest in Bitcoin, Ethereum and other cryptocurrencies in a sovereign and professional manner. Unstoppable is built with the following in mind: @@ -12,8 +12,6 @@ Unstoppable is built with the following in mind: If the above rhymes well with you then Unstoppable is for you! And we are here to focus on your unique needs and serve you in the best possible manner. -If you're merely looking for a plain way to store Bitcoin or Ethereum this app might not be for you. - WALLET FEATURES: - Non-Custodial Multi-wallet >> Manage any number of cryptocurrencies across multiple portfolio-style wallets in a non-custodial manner. This wallet is like your own bank where you are the only client and the only one in charge. It’s designed to keep assets secure and easy to restore even if the phone is stolen and tampered with. @@ -22,9 +20,9 @@ WALLET FEATURES: - Universal Wallet >> It supports all mainstream blockchains and is built in a standard compliant manner enabling users to use just one wallet app for everything crypto. -- A Bitcoin Wallet >> The wallet packs some of the most advanced Bitcoin features available: SPV enabled, BIP 44/49/84/69 compliant, Bitcoin timelocks, custom transaction fees, and more. +- A Bitcoin Wallet >> The wallet packs some of the most advanced Bitcoin features available: SPV enabled, BIP 44/49/84/86/69 compliant, Bitcoin timelocks, custom transaction fees, and more. -- A DeFi Wallet >> Full support for decentralized token swaps on Ethereum, Binance Smart Chain, Avalanche, Solana, and more. Also, the ability to interact with any smart contract-powered service on the blockchain via the WalletConnect protocol. +- A DeFi Wallet >> Full support for decentralized token swaps on Ethereum, Binance Smart Chain, Polygon, Avalanche, Solana, and more. Also, the ability to interact with any smart contract-powered service on the blockchain via the WalletConnect protocol. - Ethereum Wallet >> Full support for Ethereum blockchain, its growing ecosystem of tokens (ERC20, NFT tokens, etc.), and other decentralized services such as ENS (Ethereum Name Service). @@ -34,16 +32,14 @@ WALLET FEATURES: - Binance Wallet >> Full support for original Binance Chain (incl. BEP2) and Binance Smart Chain. -- NFT Wallet >> Full support for Non Fungible tokens (NFTs). - - Crypto Academy >> The app includes two courses meant to onboard newcomers into the world of cryptocurrencies and the DeFi ecosystem in an easy-to-digest manner covering essential aspects of cryptocurrency security, storage, privacy, transacting, and exchanging. - Wallet for Privacy Coins >> Fully supports major privacy coins (ZCash, DASH) in an SPV manner. One of the very few wallets capable of supporting fully shielded Zcash transactions as well as the ability to privatize Bitcoin transactions. - Decentralized Wallet >> Designed to work with most major blockchains in a decentralized manner where an app doesn't depend on some server of a wallet provider to send/receive transactions but interacts with blockchain networks directly. -- Privacy Focused >> Designed to allow for privacy even in the most privacy-breaching scenarios. There are no user accounts keeping your records, no identity checks that risk exposing your financials to the world, and no interaction with traditional finance layers. The app is partially TOR enabled and VPN support is coming soon. +- Privacy Focused >> Designed to allow for privacy even in the most privacy-breaching scenarios. There are no user accounts keeping your records, no identity checks that risk exposing your financials to the world, and no interaction with traditional finance layers. The app is partially TOR enabled and VPN support coming soon. - Fully Open Source >> The most transparent wallet application built to date. The entire 4-year production process of the app is openly accessible online along with 100% of its code for anyone to evaluate or reuse in other projects. Verified and audited by third parties. -Be Unstoppable! 😎 \ No newline at end of file +Be Unstoppable! \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg index 254d3f79624..65ec0c2fa67 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg index 5da5a38deb7..6fac4f8ce6e 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg index db99091392c..58c38db1be1 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg index 5e2a537fb26..bab19d7263c 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg index a06498fb835..e5080db5ac1 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg index eda460b9b59..b8d48e003af 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg deleted file mode 100644 index 5cf546db84c..00000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg deleted file mode 100644 index 611abbb376f..00000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/9.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/9.jpg deleted file mode 100644 index 46a0ddac6b6..00000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/9.jpg and /dev/null differ diff --git a/fastlane/metadata/android/en-US/title.txt b/fastlane/metadata/android/en-US/title.txt index 227932607ed..945ccfcfe9a 100644 --- a/fastlane/metadata/android/en-US/title.txt +++ b/fastlane/metadata/android/en-US/title.txt @@ -1 +1 @@ -Unstoppable Wallet \ No newline at end of file +Unstoppable Crypto Wallet \ No newline at end of file diff --git a/fastlane/metadata/ru/full_description.txt b/fastlane/metadata/ru/full_description.txt index 241ab39640f..f9d664bd3dd 100644 --- a/fastlane/metadata/ru/full_description.txt +++ b/fastlane/metadata/ru/full_description.txt @@ -14,7 +14,7 @@ Unstoppable построен по следующим принципам: Если вы просто ищете простой способ хранить Bitcoin или Ethereum это приложение может не быть для вас. -ВОЗМОЖНОСТИ КОШЕЛЬКА: +WALLET FEATURES: - Не хранящий на бирже (Non-Custodial) мульти-кошелек >> Управлять любым количеством криптовалют по нескольким кошелькам, локально а не на внешнем хранилище. Этот кошелек подобен вашему собственному банку, где только вы единственный клиент и единственный распорядитель. Он предназначен для обеспечения безопасности активов и их лёгкого восстановления, даже если телефон украден и подделан. @@ -26,7 +26,7 @@ Unstoppable построен по следующим принципам: - Кошелёк DeFi >> Полная поддержка обмена децентрализованных токенов на Ethereum, Binance Smart Chain, Avalanche, Solana и многих других. Кроме того, возможность взаимодействовать с любым умным контрактом в блокчейне через протокол WalletConnect. -- Кошелёк Ethereum >> Полная поддержка блокчейна Ethereum, его растущей экосистемы токенов (ERC20, NFT токены и т. д.), и другие децентрализованные услуги, такие как ENS (Ethereum Name Service). +- Кошелёк Ethereum >> Полная поддержка блокчейна Ethereum, его растущей экосистемы токенов (ERC20, NFT токены и т. - Кошелёк Ethereum L2 >> поддержка Artbitrum, Optimism, Polygon.