From b18e293e4f6fc83e7e5069b350a46c10c4b334cd Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 24 Jun 2021 14:19:23 +0300 Subject: [PATCH 1/8] Updated on 2026-08-14 --- .../tap/common/analytics/AnalyticsHandler.kt | 10 ++- .../analytics/FirebaseAnalyticsHandler.kt | 70 ++++++++++++++--- .../tap/common/analytics/TangemSdkError.kt | 77 +++++++++++++++++++ .../com/tangem/tap/common/extensions/Map.kt | 4 + .../com/tangem/tap/domain/TangemSdkManager.kt | 9 ++- .../tap/domain/twins/TwinCardsManager.kt | 35 ++++++++- .../walletconnect/WalletConnectSdkHelper.kt | 20 +++++ .../details/redux/DetailsMiddleware.kt | 25 +++++- .../ui/walletconnect/dialogs/WcDialog.kt | 56 ++++++++++++++ .../send/redux/middlewares/SendMiddleware.kt | 17 +++- .../redux/middlewares/WalletMiddleware.kt | 10 +++ 11 files changed, 316 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/analytics/TangemSdkError.kt create mode 100644 app/src/main/java/com/tangem/tap/common/extensions/Map.kt create mode 100644 app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/WcDialog.kt diff --git a/app/src/main/java/com/tangem/tap/common/analytics/AnalyticsHandler.kt b/app/src/main/java/com/tangem/tap/common/analytics/AnalyticsHandler.kt index 1dc3586808..30bb8d545d 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/AnalyticsHandler.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/AnalyticsHandler.kt @@ -1,8 +1,16 @@ package com.tangem.tap.common.analytics +import com.tangem.TangemSdkError +import com.tangem.blockchain.common.Blockchain import com.tangem.commands.common.card.Card interface AnalyticsHandler { - fun triggerEvent(event: AnalyticsEvent, card: Card? = null) + fun triggerEvent(event: AnalyticsEvent, card: Card? = null, blockchain: Blockchain? = null) + fun logCardSdkError( + error: TangemSdkError, + actionToLog: FirebaseAnalyticsHandler.ActionToLog, + parameters: Map? = null, + card: Card? = null + ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt b/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt index d1d3ce7a38..5a91215e83 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt @@ -3,34 +3,84 @@ package com.tangem.tap.common.analytics import android.os.Bundle import androidx.core.os.bundleOf import com.google.firebase.analytics.ktx.analytics +import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.ktx.Firebase +import com.tangem.TangemSdkError +import com.tangem.blockchain.common.Blockchain import com.tangem.commands.common.card.Card +import com.tangem.tap.common.extensions.filterNotNull object FirebaseAnalyticsHandler : AnalyticsHandler { - override fun triggerEvent(event: AnalyticsEvent, card: Card?) { - Firebase.analytics.logEvent(event.event, setCardData(card)) + override fun triggerEvent(event: AnalyticsEvent, card: Card?, blockchain: Blockchain?) { + Firebase.analytics.logEvent(event.event, setData(card, blockchain)) } fun logException(name: String, throwable: Throwable) { Firebase.analytics.logEvent(name, bundleOf( - "message" to (throwable.message ?: "none"), - "cause_message" to (throwable.cause?.message ?: "none"), - "stack_trace" to throwable.stackTraceToString() + "message" to (throwable.message ?: "none"), + "cause_message" to (throwable.cause?.message ?: "none"), + "stack_trace" to throwable.stackTraceToString() )) } - private fun setCardData(card: Card?): Bundle { + override fun logCardSdkError( + error: TangemSdkError, + actionToLog: ActionToLog, + parameters: Map?, + card: Card?, + ) { + if (error is TangemSdkError.UserCancelled) return + + val params = parameters?.toMutableMap() ?: mutableMapOf() + if (card != null) params + getParamsFromCard(card) + params[AnalyticsParam.ACTION] = actionToLog.key + params[AnalyticsParam.ERROR_CODE] = error.code.toString() + params[AnalyticsParam.ERROR_DESCRIPTION] = error.javaClass.simpleName + params[AnalyticsParam.ERROR_KEY] = "TangemSdkError" + + params.forEach { (key, value) -> + FirebaseCrashlytics.getInstance().setCustomKey(key.param, value) + } + val cardError = TangemSdk.map(error) + FirebaseCrashlytics.getInstance().recordException(cardError) + } + + private fun getParamsFromCard(card: Card): Map { + return mapOf( + AnalyticsParam.FIRMWARE to card.firmwareVersion.version, + AnalyticsParam.BATCH_ID to card.cardData?.batchId + ).filterNotNull() + } + + private fun setData(card: Card?, blockchain: Blockchain?): Bundle { if (card == null) return bundleOf() return bundleOf( - AnalyticsParam.BLOCKCHAIN.param to card.cardData?.blockchainName, - AnalyticsParam.BATCH_ID.param to card.cardData?.batchId, - AnalyticsParam.FIRMWARE.param to card.firmwareVersion.version + AnalyticsParam.BLOCKCHAIN.param to (blockchain?.currency ?: card.cardData?.blockchainName), + AnalyticsParam.BATCH_ID.param to card.cardData?.batchId, + AnalyticsParam.FIRMWARE.param to card.firmwareVersion.version ) } - private enum class AnalyticsParam(val param: String) { + enum class AnalyticsParam(val param: String) { BLOCKCHAIN("blockchain"), BATCH_ID("batch_id"), FIRMWARE("firmware"), + ACTION("action"), + ERROR_DESCRIPTION("error_description"), + ERROR_CODE("error_code"), + NEW_SECURITY_OPTION("new_security_option"), + ERROR_KEY("Tangem SDK error key"), + } + + enum class ActionToLog(val key: String) { + Scan("tap_scan_task"), + SendTransaction("send_transaction"), + WalletConnectSign("wallet_connect_personal_sign"), + WalletConnectTransaction("wallet_connect_tx_sign"), + ReadPinSettings("read_pin_settings"), + ChangeSecOptions("change_sec_options"), + CreateWallet("create_wallet"), + PurgeWallet("purge_wallet"), + WriteIssuerData("write_issuer_data"), } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/TangemSdkError.kt b/app/src/main/java/com/tangem/tap/common/analytics/TangemSdkError.kt new file mode 100644 index 0000000000..1c574708e1 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/analytics/TangemSdkError.kt @@ -0,0 +1,77 @@ +package com.tangem.tap.common.analytics + +import com.tangem.TangemSdkError + +object TangemSdk { + + // This mapping is performed to group errors in FirebaseCrashlytics. + // At the moment, the errors in Crashlytics can only be grouped by their place of creation (class and line). + fun map(error: TangemSdkError): TangemSdkError { + return when (error) { + is TangemSdkError.TagLost -> TangemSdkError.TagLost() + is TangemSdkError.ExtendedLengthNotSupported -> TangemSdkError.ExtendedLengthNotSupported() + is TangemSdkError.SerializeCommandError -> TangemSdkError.SerializeCommandError() + is TangemSdkError.DeserializeApduFailed -> TangemSdkError.DeserializeApduFailed() + is TangemSdkError.EncodingFailedTypeMismatch -> TangemSdkError.EncodingFailedTypeMismatch( + error.customMessage) + is TangemSdkError.EncodingFailed -> TangemSdkError.EncodingFailed(error.customMessage) + is TangemSdkError.DecodingFailedMissingTag -> TangemSdkError.DecodingFailedMissingTag( + error.customMessage) + is TangemSdkError.DecodingFailedTypeMismatch -> TangemSdkError.DecodingFailedTypeMismatch( + error.customMessage) + is TangemSdkError.DecodingFailed -> TangemSdkError.DecodingFailed(error.customMessage) + is TangemSdkError.InvalidResponse -> TangemSdkError.InvalidResponse() + is TangemSdkError.UnknownStatus -> TangemSdkError.UnknownStatus(error.statusWord) + is TangemSdkError.ErrorProcessingCommand -> TangemSdkError.ErrorProcessingCommand() + is TangemSdkError.InvalidState -> TangemSdkError.InvalidState() + is TangemSdkError.InsNotSupported -> TangemSdkError.InsNotSupported() + is TangemSdkError.InvalidParams -> TangemSdkError.InvalidParams() + is TangemSdkError.NeedEncryption -> TangemSdkError.NeedEncryption() + is TangemSdkError.FileNotFound -> TangemSdkError.FileNotFound() + is TangemSdkError.WalletNotFound -> TangemSdkError.WalletNotFound() + is TangemSdkError.AlreadyPersonalized -> TangemSdkError.AlreadyPersonalized() + is TangemSdkError.CannotBeDepersonalized -> TangemSdkError.CannotBeDepersonalized() + is TangemSdkError.Pin1Required -> TangemSdkError.Pin1Required() + is TangemSdkError.CardReadWrongWallet -> TangemSdkError.CardReadWrongWallet() + is TangemSdkError.CardWithMaxZeroWallets -> TangemSdkError.CardWithMaxZeroWallets() + is TangemSdkError.AlreadyCreated -> TangemSdkError.AlreadyCreated() + is TangemSdkError.WalletIndexExceedsMaxValue -> TangemSdkError.WalletIndexExceedsMaxValue() + is TangemSdkError.MaxNumberOfWalletsCreated -> TangemSdkError.MaxNumberOfWalletsCreated() + is TangemSdkError.WalletIndexNotCorrect -> TangemSdkError.WalletIndexNotCorrect() + is TangemSdkError.PurgeWalletProhibited -> TangemSdkError.PurgeWalletProhibited() + is TangemSdkError.Pin1CannotBeChanged -> TangemSdkError.Pin1CannotBeChanged() + is TangemSdkError.Pin2CannotBeChanged -> TangemSdkError.Pin2CannotBeChanged() + is TangemSdkError.Pin1CannotBeDefault -> TangemSdkError.Pin1CannotBeDefault() + is TangemSdkError.NoRemainingSignatures -> TangemSdkError.NoRemainingSignatures() + is TangemSdkError.EmptyHashes -> TangemSdkError.EmptyHashes() + is TangemSdkError.HashSizeMustBeEqual -> TangemSdkError.HashSizeMustBeEqual() + is TangemSdkError.WalletIsNotCreated -> TangemSdkError.WalletIsNotCreated() + is TangemSdkError.SignHashesNotAvailable -> TangemSdkError.SignHashesNotAvailable() + is TangemSdkError.TooManyHashesInOneTransaction -> TangemSdkError.TooManyHashesInOneTransaction() + is TangemSdkError.ExtendedDataSizeTooLarge -> TangemSdkError.ExtendedDataSizeTooLarge() + is TangemSdkError.NotPersonalized -> TangemSdkError.NotPersonalized() + is TangemSdkError.NotActivated -> TangemSdkError.NotActivated() + is TangemSdkError.WalletIsPurged -> TangemSdkError.WalletIsPurged() + is TangemSdkError.Pin2OrCvcRequired -> TangemSdkError.Pin2OrCvcRequired() + is TangemSdkError.VerificationFailed -> TangemSdkError.VerificationFailed() + is TangemSdkError.DataSizeTooLarge -> TangemSdkError.DataSizeTooLarge() + is TangemSdkError.MissingCounter -> TangemSdkError.MissingCounter() + is TangemSdkError.OverwritingDataIsProhibited -> TangemSdkError.OverwritingDataIsProhibited() + is TangemSdkError.DataCannotBeWritten -> TangemSdkError.DataCannotBeWritten() + is TangemSdkError.MissingIssuerPubicKey -> TangemSdkError.MissingIssuerPubicKey() + is TangemSdkError.CardVerificationFailed -> TangemSdkError.CardVerificationFailed() + is TangemSdkError.WrongPin1 -> TangemSdkError.WrongPin1() + is TangemSdkError.WrongPin2 -> TangemSdkError.WrongPin2() + is TangemSdkError.UnknownError -> TangemSdkError.UnknownError() + is TangemSdkError.UserCancelled -> TangemSdkError.UserCancelled() + is TangemSdkError.Busy -> TangemSdkError.Busy() + is TangemSdkError.MissingPreflightRead -> TangemSdkError.MissingPreflightRead() + is TangemSdkError.WrongCardNumber -> TangemSdkError.WrongCardNumber() + is TangemSdkError.WrongCardType -> TangemSdkError.WrongCardType() + is TangemSdkError.CardError -> TangemSdkError.CardError() + is TangemSdkError.FirmwareNotSupported -> TangemSdkError.FirmwareNotSupported() + is TangemSdkError.WalletError -> TangemSdkError.WalletError() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Map.kt b/app/src/main/java/com/tangem/tap/common/extensions/Map.kt new file mode 100644 index 0000000000..e970306219 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/extensions/Map.kt @@ -0,0 +1,4 @@ +package com.tangem.tap.common.extensions + +fun Map.filterNotNull(): Map = + filter { it.key != null && it.value != null } as Map \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt index af401f69bc..2a7810f725 100644 --- a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt @@ -16,6 +16,7 @@ import com.tangem.common.extensions.calculateSha256 import com.tangem.tangem_sdk_new.extensions.init import com.tangem.tap.common.analytics.AnalyticsEvent import com.tangem.tap.common.analytics.AnalyticsHandler +import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.domain.extensions.getDefaultWalletIndex import com.tangem.tap.domain.tasks.CreateWalletAndRescanTask import com.tangem.tap.domain.tasks.ScanNoteResponse @@ -37,10 +38,16 @@ class TangemSdkManager(val activity: ComponentActivity) { analyticsHandler: AnalyticsHandler, messageRes: Int? = null ): CompletionResult { analyticsHandler.triggerEvent(AnalyticsEvent.READY_TO_SCAN, null) - return runTaskAsyncReturnOnMain(ScanNoteTask(), + val result = runTaskAsyncReturnOnMain(ScanNoteTask(), initialMessage = Message( activity.getString(messageRes ?: R.string.initial_message_scan_header) )) + if (result is CompletionResult.Failure) { + (result.error as? TangemSdkError)?.let { error -> + analyticsHandler.logCardSdkError(error, FirebaseAnalyticsHandler.ActionToLog.Scan) + } + } + return result } suspend fun createWallet(cardId: String?): CompletionResult { diff --git a/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt b/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt index 43d313f8a6..af088dc421 100644 --- a/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt @@ -2,12 +2,14 @@ package com.tangem.tap.domain.twins import com.tangem.KeyPair import com.tangem.Message +import com.tangem.TangemSdkError import com.tangem.blockchain.extensions.Result import com.tangem.blockchain.extensions.SimpleResult import com.tangem.common.CompletionResult import com.tangem.common.extensions.hexToBytes import com.tangem.common.extensions.toHexString import com.tangem.crypto.CryptoUtils +import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.domain.tasks.ScanNoteResponse import com.tangem.tap.tangemSdkManager @@ -28,7 +30,16 @@ class TwinCardsManager(private val scanNoteResponse: ScanNoteResponse) { currentCardPublicKey = response.data.walletPublicKey.toHexString() return SimpleResult.Success } - is CompletionResult.Failure -> return SimpleResult.failure(response.error) + is CompletionResult.Failure -> { + (response.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.CreateWallet, + card = scanNoteResponse.card + ) + } + return SimpleResult.failure(response.error) + } } } @@ -48,7 +59,16 @@ class TwinCardsManager(private val scanNoteResponse: ScanNoteResponse) { secondCardPublicKey = response.data.walletPublicKey.toHexString() return SimpleResult.Success } - is CompletionResult.Failure -> return SimpleResult.failure(response.error) + is CompletionResult.Failure -> { + (response.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.CreateWallet, + card = scanNoteResponse.card + ) + } + return SimpleResult.failure(response.error) + } } } @@ -60,7 +80,16 @@ class TwinCardsManager(private val scanNoteResponse: ScanNoteResponse) { ) return when (response) { is CompletionResult.Success -> Result.Success(response.data) - is CompletionResult.Failure -> Result.failure(response.error) + is CompletionResult.Failure -> { + (response.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.WriteIssuerData, + card = scanNoteResponse.card + ) + } + Result.failure(response.error) + } } } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt index a78b81d7ce..7cff86a035 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt @@ -1,6 +1,7 @@ package com.tangem.tap.domain.walletconnect import com.tangem.Message +import com.tangem.TangemSdkError import com.tangem.blockchain.blockchains.ethereum.EthereumGasLoader import com.tangem.blockchain.blockchains.ethereum.EthereumTransactionExtras import com.tangem.blockchain.blockchains.ethereum.EthereumUtils @@ -14,6 +15,7 @@ import com.tangem.commands.SignCommand import com.tangem.commands.wallet.WalletIndex import com.tangem.common.CompletionResult import com.tangem.common.extensions.hexToBytes +import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.extensions.toFormattedString import com.tangem.tap.features.details.redux.walletconnect.* import com.tangem.tap.features.details.ui.walletconnect.dialogs.PersonalSignDialogData @@ -128,6 +130,12 @@ class WalletConnectSdkHelper { HEX_PREFIX + data.walletManager.wallet.recentTransactions.last().hash } is SimpleResult.Failure -> { + (result.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.WalletConnectTransaction, + ) + } Timber.e(result.error) null } @@ -152,6 +160,12 @@ class WalletConnectSdkHelper { HEX_PREFIX + result.data } is CompletionResult.Failure -> { + (result.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.WalletConnectSign, + ) + } Timber.e(result.error.customMessage) null } @@ -208,6 +222,12 @@ class WalletConnectSdkHelper { ) } is CompletionResult.Failure -> { + (result.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.WalletConnectSign, + ) + } Timber.e(result.error.customMessage) null } diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index b66aa958e9..90f75c3efe 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -1,7 +1,9 @@ package com.tangem.tap.features.details.redux +import com.tangem.TangemSdkError import com.tangem.commands.common.network.Result import com.tangem.common.CompletionResult +import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen @@ -90,6 +92,15 @@ class DetailsMiddleware { is CompletionResult.Success -> { store.dispatch(NavigationAction.PopBackTo(AppScreen.Home)) } + is CompletionResult.Failure -> { + (result.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.PurgeWallet, + card = store.state.detailsState.card + ) + } + } } } } @@ -148,8 +159,20 @@ class DetailsMiddleware { } store.dispatch(DetailsAction.ManageSecurity.SaveChanges.Success) } - is CompletionResult.Failure, null -> + is CompletionResult.Failure -> { + (result.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error = error, + actionToLog = FirebaseAnalyticsHandler.ActionToLog.ChangeSecOptions, + parameters = mapOf( + FirebaseAnalyticsHandler.AnalyticsParam.NEW_SECURITY_OPTION to + (selectedOption?.name ?: "") + ), + card = store.state.detailsState.card + ) + } store.dispatch(DetailsAction.ManageSecurity.SaveChanges.Failure) + } } } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/WcDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/WcDialog.kt new file mode 100644 index 0000000000..4bbb63e270 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/WcDialog.kt @@ -0,0 +1,56 @@ +package com.tangem.tap.features.details.ui.walletconnect.dialogs + +import android.content.Context +import androidx.appcompat.app.AlertDialog + +class WcDialog { + companion object { + fun create(dialogData: DialogData, context: Context): AlertDialog { + return AlertDialog.Builder(context).apply { + setTitle(dialogData.title) + setMessage(dialogData.message) + setPositiveButton(dialogData.positiveButton.title) { _, _ -> + dialogData.positiveButton.action() + } + setNegativeButton(dialogData.negativeButton.title) { _, _ -> + dialogData.negativeButton.action() + } + setOnDismissListener { dialogData.onDismissAction() } + }.create() + } + } +} + +data class DialogData( + val title: String, + val message: String, + val positiveButton: ButtonData, + val negativeButton: ButtonData, + val onDismissAction: () -> Unit, +) + +data class ButtonData( + val title: String, + val action: () -> Unit, +) + +//class WcDialogMessageBuilder(val messageRes: Int, val data: DialogMessageData? = null) { +// fun build(context: Context): String { +// when (data) { +// null -> context.getString(messageRes) +// } +// } +//} + +interface DialogMessageData + +data class WcTransactionDialogMessageData( + val cardId: String, + val dAppName: String, + val dAppUrl: String, + val amount: String, + val gasAmount: String, + val totalAmount: String, + val balance: String, + val isEnoughFundsToSend: Boolean, +) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt index 7dcececcda..9ca7c9ce1c 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt @@ -1,6 +1,7 @@ package com.tangem.tap.features.send.redux.middlewares import com.google.firebase.crashlytics.FirebaseCrashlytics +import com.tangem.TangemSdkError import com.tangem.blockchain.blockchains.stellar.StellarTransactionExtras import com.tangem.blockchain.blockchains.xrp.XrpTransactionBuilder import com.tangem.blockchain.common.* @@ -127,7 +128,11 @@ private fun sendTransaction( when (result) { is SimpleResult.Success -> { tangemSdk.config.linkedTerminal = isLinkedTerminal - FirebaseAnalyticsHandler.triggerEvent(AnalyticsEvent.TRANSACTION_IS_SENT, card) + FirebaseAnalyticsHandler.triggerEvent( + event = AnalyticsEvent.TRANSACTION_IS_SENT, + card = card, + blockchain = walletManager.wallet.blockchain + ) dispatch(SendAction.SendSuccess) dispatch(NavigationAction.PopBackTo()) scope.launch(Dispatchers.IO) { @@ -178,6 +183,16 @@ private fun sendTransaction( dispatch(SendAction.SendError(TapError.XmlError.AssetAccountNotCreated)) } else -> { + (result.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.SendTransaction, + mapOf( + FirebaseAnalyticsHandler.AnalyticsParam.BLOCKCHAIN + to walletManager.wallet.blockchain.currency), + card = card, + ) + } Timber.e(throwable) FirebaseCrashlytics.getInstance().recordException(throwable) dispatch(SendAction.SendError(TapError.CustomError(message))) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt index 183d55ddda..53ce1c2b2a 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt @@ -3,6 +3,7 @@ package com.tangem.tap.features.wallet.redux.middlewares import android.content.Intent import android.net.Uri import androidx.core.content.ContextCompat +import com.tangem.TangemSdkError import com.tangem.blockchain.common.* import com.tangem.common.CompletionResult import com.tangem.common.extensions.isZero @@ -111,6 +112,15 @@ class WalletMiddleware { globalState.tapWalletManager.onCardScanned(scanNoteResponse) } } + is CompletionResult.Failure -> { + (result.error as? TangemSdkError)?.let { error -> + FirebaseAnalyticsHandler.logCardSdkError( + error, + FirebaseAnalyticsHandler.ActionToLog.CreateWallet, + card = store.state.detailsState.card + ) + } + } } } } From 3df2441d4f2f88dc445c46a8ce9bb1bddc68705e Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 24 Jun 2021 14:32:27 +0300 Subject: [PATCH 2/8] Updated on 2026-08-14 --- app/src/main/assets/erc20_tokens.json | 5682 ++++++++++++++--- .../main/res/layout/item_popular_token.xml | 12 +- 2 files changed, 4768 insertions(+), 926 deletions(-) diff --git a/app/src/main/assets/erc20_tokens.json b/app/src/main/assets/erc20_tokens.json index 22fe8bd802..829096ad47 100644 --- a/app/src/main/assets/erc20_tokens.json +++ b/app/src/main/assets/erc20_tokens.json @@ -1,927 +1,4761 @@ [ - { - "decimalCount" : 18, - "symbol" : "ZRX", - "name" : "0x", - "contractAddress" : "0xE41d2489571d322189246DaFA5ebDe1F4699F498" - }, - { - "decimalCount" : 18, - "symbol" : "AAVE", - "name" : "Aave", - "contractAddress" : "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9" - }, - { - "decimalCount" : 18, - "symbol" : "LEND", - "name" : "Aave (OLD)", - "contractAddress" : "0x80fB784B7eD66730e8b1DBd9820aFD29931aab03" - }, - { - "decimalCount" : 18, - "symbol" : "ADX", - "name" : "AdEx", - "contractAddress" : "0xADE00C28244d5CE17D72E40330B1c318cD12B7c3" - }, - { - "decimalCount" : 9, - "symbol" : "ADT", - "name" : "adToken", - "contractAddress" : "0xD0D6D6C5Fe4a677D343cC433536BB717bAe167dD" - }, - { - "decimalCount" : 18, - "symbol" : "ELF", - "name" : "Aelf", - "contractAddress" : "0xbf2179859fc6d5bee9bf9158632dc51678a4100e" - }, - { - "decimalCount" : 8, - "symbol" : "ARN", - "name" : "Aeron", - "contractAddress" : "0xBA5F11b16B155792Cf3B2E6880E8706859A8AEB6" - }, - { - "decimalCount" : 18, - "symbol" : "AE", - "name" : "Aeternity", - "contractAddress" : "0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d" - }, - { - "decimalCount" : 8, - "symbol" : "AION", - "name" : "Aion", - "contractAddress" : "0x4CEdA7906a5Ed2179785Cd3A40A69ee8bc99C466" - }, - { - "decimalCount" : 4, - "symbol" : "AST", - "name" : "Airswap", - "contractAddress" : "0x27054b13b1b798b345b591a4d22e6562d47ea75a" - }, - { - "decimalCount" : 18, - "symbol" : "AMB", - "name" : "Amber", - "contractAddress" : "0x4dc3643dbc642b72c158e7f3d2ff232df61cb6ce" - }, - { - "decimalCount" : 18, - "symbol" : "AMLT", - "name" : "AMLT by Coinfirm", - "contractAddress" : "0xca0e7269600d353f70b14ad118a49575455c0f2f" - }, - { - "decimalCount" : 18, - "symbol" : "APPC", - "name" : "AppCoins", - "contractAddress" : "0x1a7a8bd9106f2b8d977e08582dc7d24c723ab0db" - }, - { - "decimalCount" : 18, - "symbol" : "ANT", - "name" : "Aragon", - "contractAddress" : "0xa117000000f279d81a1d3cc75430faa017fa5a2e" - }, - { - "decimalCount" : 18, - "symbol" : "ABT", - "name" : "ArcBlock", - "contractAddress" : "0xb98d4c97425d9908e66e53a6fdf673acca0be986" - }, - { - "decimalCount" : 18, - "symbol" : "ATMI", - "name" : "Atonomi", - "contractAddress" : "0x97aeb5066e1a590e868b511457beb6fe99d329f5" - }, - { - "decimalCount" : 18, - "symbol" : "REP", - "name" : "Augur", - "contractAddress" : "0x1985365e9f78359a9B6AD760e32412f4a445E862" - }, - { - "decimalCount" : 18, - "symbol" : "AVM", - "name" : "AVM Ecosystem", - "contractAddress" : "0x74004a7227615fb52b82d17ffabfa376907d8a4d" - }, - { - "decimalCount" : 18, - "symbol" : "BNT", - "name" : "Bancor", - "contractAddress" : "0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C" - }, - { - "decimalCount" : 18, - "symbol" : "BAT", - "name" : "Basic Attention", - "contractAddress" : "0x0D8775F648430679A709E98d2b0Cb6250d2887EF" - }, - { - "decimalCount" : 18, - "symbol" : "BNB", - "name" : "Binance Coin", - "contractAddress" : "0xb8c77482e45f1f44de1745f52c74426c631bdd52" - }, - { - "decimalCount" : 18, - "symbol" : "BUSD", - "name" : "Binance USD", - "contractAddress" : "0x4fabb145d64652a948d72533023f6e7a623c7c53" - }, - { - "decimalCount" : 18, - "symbol" : "STU", - "name" : "bitJob", - "contractAddress" : "0x0371a82e4a9d0a4312f3ee2ac9c6958512891372" - }, - { - "decimalCount" : 18, - "symbol" : "BIX", - "name" : "BIX Token", - "contractAddress" : "0xb3104b4b9da82025e8b9f8fb28b3553ce2f67069" - }, - { - "decimalCount" : 18, - "symbol" : "VEE", - "name" : "BLOCKv", - "contractAddress" : "0x340d2bde5eb28c1eed91b2f790723e3b160613b7" - }, - { - "decimalCount" : 18, - "symbol" : "BLZ", - "name" : "Bluzelle", - "contractAddress" : "0x5732046a883704404f284ce41ffadd5b007fd668" - }, - { - "decimalCount" : 18, - "symbol" : "BRD", - "name" : "BRD Token", - "contractAddress" : "0x558ec3152e2eb2174905cd19aea4e34a23de9ad6" - }, - { - "decimalCount" : 8, - "symbol" : "BTM", - "name" : "Bytom", - "contractAddress" : "0xcb97e65f07da24d46bcdd078ebebd7c6e6e3d750" - }, - { - "decimalCount" : 18, - "symbol" : "CAS", - "name" : "Cashaa", - "contractAddress" : "0xe8780b48bdb05f928697a5e8155f672ed91462f7" - }, - { - "decimalCount" : 18, - "symbol" : "CSP", - "name" : "Caspian", - "contractAddress" : "0xa6446d655a0c34bc4f05042ee88170d056cbaf45" - }, - { - "decimalCount" : 18, - "symbol" : "LINK", - "name" : "ChainLink", - "contractAddress" : "0x514910771af9ca656af840dff83e8264ecf986ca" - }, - { - "decimalCount" : 8, - "symbol" : "TIME", - "name" : "Chronobank", - "contractAddress" : "0x6531f133e6DeeBe7F2dcE5A0441aA7ef330B4e53" - }, - { - "decimalCount" : 18, - "symbol" : "CND", - "name" : "Cindicator", - "contractAddress" : "0xd4c435f5b09f855c3317c8524cb1f586e42795fa" - }, - { - "decimalCount" : 8, - "symbol" : "CVC", - "name" : "Civic", - "contractAddress" : "0x41e5560054824ea6b0732e656e3ad64e20e94e45" - }, - { - "decimalCount" : 18, - "symbol" : "CNN", - "name" : "CNN Token", - "contractAddress" : "0x8713d26637cf49e1b6b4a7ce57106aabc9325343" - }, - { - "decimalCount" : 18, - "symbol" : "CFI", - "name" : "Cofound.it", - "contractAddress" : "0x12FEF5e57bF45873Cd9B62E9DBd7BFb99e32D73e" - }, - { - "decimalCount" : 18, - "symbol" : "CCC", - "name" : "Container Crypto Coin", - "contractAddress" : "0x9e3359f862b6c7f5c660cfd6d1aa6909b1d9504d" - }, - { - "decimalCount" : 6, - "symbol" : "CS", - "name" : "Credits", - "contractAddress" : "0x46b9ad944d1059450da1163511069c718f699d31" - }, - { - "decimalCount" : 18, - "symbol" : "CRPT", - "name" : "Crypterium", - "contractAddress" : "0x08389495d7456e1951ddf7c3a1314a4bfb646d8b" - }, - { - "decimalCount" : 18, - "symbol" : "AUTO", - "name" : "CUBE", - "contractAddress" : "0x622dFfCc4e83C64ba959530A5a5580687a57581b" - }, - { - "decimalCount" : 18, - "symbol" : "CMT", - "name" : "CyberMiles", - "contractAddress" : "0xf85fEea2FdD81d51177F6b8F35F0e6734Ce45F5F" - }, - { - "decimalCount" : 18, - "symbol" : "DAI", - "name" : "Dai", - "contractAddress" : "0x6b175474e89094c44da98b954eedeac495271d0f" - }, - { - "decimalCount" : 18, - "symbol" : "MANA", - "name" : "Decentraland", - "contractAddress" : "0x0F5D2fB29fb7d3CFeE444a200298f468908cC942" - }, - { - "decimalCount" : 8, - "symbol" : "DENT", - "name" : "DENT", - "contractAddress" : "0x3597bfd533a99c9aa083587b074434e61eb0a258" - }, - { - "decimalCount" : 0, - "symbol" : "XJP", - "name" : "Digital JPY", - "contractAddress" : "0x39689fE671C01fcE173395f6BC45D4C332026666" - }, - { - "decimalCount" : 9, - "symbol" : "DGD", - "name" : "DigixDAO", - "contractAddress" : "0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A" - }, - { - "decimalCount" : 18, - "symbol" : "DNT", - "name" : "district0x", - "contractAddress" : "0x0abdace70d3790235af448c88547603b945604ea" - }, - { - "decimalCount" : 18, - "symbol" : "DOV", - "name" : "Dovu", - "contractAddress" : "0xac3211a5025414af2866ff09c23fc18bc97e79b1" - }, - { - "decimalCount" : 18, - "symbol" : "DRGN", - "name" : "Dragon", - "contractAddress" : "0x419c4db4b9e25d6db2ad9691ccb832c8d9fda05e" - }, - { - "decimalCount" : 0, - "symbol" : "EDG", - "name" : "Edgeless", - "contractAddress" : "0x08711D3B02C8758F2FB3ab4e80228418a7F8e39c" - }, - { - "decimalCount" : 18, - "symbol" : "EDO", - "name" : "Eidoo", - "contractAddress" : "0xced4e93198734ddaff8492d525bd258d49eb388e" - }, - { - "decimalCount" : 8, - "symbol" : "ENG", - "name" : "Enigma", - "contractAddress" : "0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4" - }, - { - "decimalCount" : 18, - "symbol" : "ENJ", - "name" : "EnjinCoin", - "contractAddress" : "0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c" - }, - { - "decimalCount" : 18, - "symbol" : "EOS", - "name" : "EOS", - "contractAddress" : "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0" - }, - { - "decimalCount" : 2, - "symbol" : "EUR.AVM", - "name" : "EUR AVM", - "contractAddress" : "0xF01Cd2f1c9E42c509d309aC8C5b29B6dA8E64b1a" - }, - { - "decimalCount" : 18, - "symbol" : "XUC", - "name" : "Exchange Union", - "contractAddress" : "0xc324a2f6b05880503444451b8b27e6f9e63287cb" - }, - { - "decimalCount" : 18, - "symbol" : "1ST", - "name" : "FirstBlood", - "contractAddress" : "0xAf30D2a7E90d7DC361c8C4585e9BB7D2F6f15bc7" - }, - { - "decimalCount" : 18, - "symbol" : "FXC", - "name" : "Flexacoin", - "contractAddress" : "0x4a57E687b9126435a9B19E4A802113e266AdeBde" - }, - { - "decimalCount" : 8, - "symbol" : "FUN", - "name" : "FunFair", - "contractAddress" : "0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b" - }, - { - "decimalCount" : 18, - "symbol" : "FSN", - "name" : "Fusion", - "contractAddress" : "0xd0352a019e9ab9d757776f532377aaebd36fd541" - }, - { - "decimalCount" : 2, - "symbol" : "GUSD", - "name" : "Gemini Dollar", - "contractAddress" : "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd" - }, - { - "decimalCount" : 9, - "symbol" : "GNX", - "name" : "Genaro Network", - "contractAddress" : "0x6ec8a24cabdc339a06a172f8223ea557055adaa5" - }, - { - "decimalCount" : 18, - "symbol" : "GVT", - "name" : "Genesis Vision", - "contractAddress" : "0x103c3A209da59d3E7C4A89307e66521e081CFDF0" - }, - { - "decimalCount" : 5, - "symbol" : "GTO", - "name" : "Gifto", - "contractAddress" : "0xc5bbae50781be1669306b9e001eff57a2957b09d" - }, - { - "decimalCount" : 8, - "symbol" : "GBX", - "name" : "Globitex", - "contractAddress" : "0x12fcd6463e66974cf7bbc24ffc4d40d6be458283" - }, - { - "decimalCount" : 18, - "symbol" : "GNO", - "name" : "Gnosis", - "contractAddress" : "0x6810e776880C02933D47DB1b9fc05908e5386b96" - }, - { - "decimalCount" : 18, - "symbol" : "GNT", - "name" : "Golem", - "contractAddress" : "0xa74476443119A942dE498590Fe1f2454d7D4aC0d" - }, - { - "decimalCount" : 18, - "symbol" : "HPB", - "name" : "HPBCoin", - "contractAddress" : "0x38c6a68304cdefb9bec48bbfaaba5c5b47818bb2" - }, - { - "decimalCount" : 18, - "symbol" : "HYDRO", - "name" : "Hydro", - "contractAddress" : "0xebbdf302c940c6bfd49c6b165f457fdb324649bc" - }, - { - "decimalCount" : 18, - "symbol" : "ICX", - "name" : "ICON", - "contractAddress" : "0xb5a5f22694352c15b00323844ad545abb2b11028" - }, - { - "decimalCount" : 18, - "symbol" : "ICN", - "name" : "ICONOMI", - "contractAddress" : "0x888666CA69E0f178DED6D75b5726Cee99A87D698" - }, - { - "decimalCount" : 9, - "symbol" : "RLC", - "name" : "iExec RLC", - "contractAddress" : "0x607F4C5BB672230e8672085532f7e901544a7375" - }, - { - "decimalCount" : 18, - "symbol" : "IOST", - "name" : "IOStoken", - "contractAddress" : "0xfa1a856cfa3409cfa145fa4e20eb270df3eb21ab" - }, - { - "decimalCount" : 18, - "symbol" : "ITC", - "name" : "IOT Chain", - "contractAddress" : "0x5e6b6d9abad9093fdc861ea1600eba1b355cd940" - }, - { - "decimalCount" : 8, - "symbol" : "IXT", - "name" : "iXledger", - "contractAddress" : "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094" - }, - { - "decimalCount" : 18, - "symbol" : "KIN", - "name" : "Kin", - "contractAddress" : "0x818Fc6C2Ec5986bc6E2CBf00939d90556aB12ce5" - }, - { - "decimalCount" : 18, - "symbol" : "KNC", - "name" : "Kyber Network", - "contractAddress" : "0xdd974D5C2e2928deA5F71b9825b8b646686BD200" - }, - { - "decimalCount" : 18, - "symbol" : "LOOM", - "name" : "Loom", - "contractAddress" : "0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0" - }, - { - "decimalCount" : 18, - "symbol" : "LRC", - "name" : "Loopring", - "contractAddress" : "0xbbbbca6a901c926f240b89eacb641d8aec7aeafd" - }, - { - "decimalCount" : 18, - "symbol" : "LUN", - "name" : "Lunyr", - "contractAddress" : "0xfa05A73FfE78ef8f1a739473e462c54bae6567D9" - }, - { - "decimalCount" : 18, - "symbol" : "MKR", - "name" : "Maker", - "contractAddress" : "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2" - }, - { - "decimalCount" : 3, - "symbol" : "GUP", - "name" : "Matchpool", - "contractAddress" : "0xf7B098298f7C69Fc14610bf71d5e02c60792894C" - }, - { - "decimalCount" : 18, - "symbol" : "MAN", - "name" : "MATRIX AI Network", - "contractAddress" : "0xe25bcec5d3801ce3a794079bf94adf1b8ccd802d" - }, - { - "decimalCount" : 8, - "symbol" : "MTL", - "name" : "Metal", - "contractAddress" : "0xF433089366899D83a9f26A773D59ec7eCF30355e" - }, - { - "decimalCount" : 8, - "symbol" : "MCO", - "name" : "Monaco", - "contractAddress" : "0xB63B606Ac810a52cCa15e44bB630fd42D8d1d83d" - }, - { - "decimalCount" : 8, - "symbol" : "MYST", - "name" : "Mysterium", - "contractAddress" : "0xa645264C5603E96c3b0B078cdab68733794B0A71" - }, - { - "decimalCount" : 18, - "symbol" : "NAS", - "name" : "Nebulas", - "contractAddress" : "0x5d65D971895Edc438f465c17DB6992698a52318D" - }, - { - "decimalCount" : 18, - "symbol" : "NEXO", - "name" : "Nexo", - "contractAddress" : "0xb62132e35a6c13ee1ee0f84dc5d40bad8d815206" - }, - { - "decimalCount" : 18, - "symbol" : "NCASH", - "name" : "Nucleus Vision", - "contractAddress" : "0x809826cceab68c387726af962713b64cb5cb3cca" - }, - { - "decimalCount" : 18, - "symbol" : "NULS", - "name" : "Nuls", - "contractAddress" : "0xb91318f35bdb262e9423bc7c7c2a3a93dd93c92c" - }, - { - "decimalCount" : 18, - "symbol" : "NMR", - "name" : "Numeraire", - "contractAddress" : "0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671" - }, - { - "decimalCount" : 18, - "symbol" : "OMG", - "name" : "OmiseGO", - "contractAddress" : "0xd26114cd6EE289AccF82350c8d8487fedB8A0C07" - }, - { - "decimalCount" : 18, - "symbol" : "OXT", - "name" : "Orchid", - "contractAddress" : "0x4575f41308ec1483f3d399aa9a2826d74da13deb" - }, - { - "decimalCount" : 18, - "symbol" : "OST", - "name" : "OST", - "contractAddress" : "0x2C4e8f2D746113d0696cE89B35F0d8bF88E0AEcA" - }, - { - "decimalCount" : 18, - "symbol" : "PRL", - "name" : "Oyster Pearl", - "contractAddress" : "0x1844b21593262668b7248d0f57a220caaba46ab9" - }, - { - "decimalCount" : 8, - "symbol" : "PTOY", - "name" : "Patientory", - "contractAddress" : "0x8Ae4BF2C33a8e667de34B54938B0ccD03Eb8CC06" - }, - { - "decimalCount" : 18, - "symbol" : "PAX", - "name" : "Paxos Standard", - "contractAddress" : "0x8e870d67f660d95d5be530380d0ec0bd388289e1" - }, - { - "decimalCount" : 18, - "symbol" : "PMTN", - "name" : "Peer Mountain", - "contractAddress" : "0xe91df2bb9bccd18c45f01843cab88768d64f2d32" - }, - { - "decimalCount" : 8, - "symbol" : "POE", - "name" : "Po.et", - "contractAddress" : "0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195" - }, - { - "decimalCount" : 18, - "symbol" : "PAL", - "name" : "PolicyPal Network", - "contractAddress" : "0xfeDAE5642668f8636A11987Ff386bfd215F942EE" - }, - { - "decimalCount" : 18, - "symbol" : "POLY", - "name" : "Polymath", - "contractAddress" : "0x9992eC3cF6A55b00978cdDF2b27BC6882d88D1eC" - }, - { - "decimalCount" : 8, - "symbol" : "PPT", - "name" : "Populous", - "contractAddress" : "0xd4fa1460F537bb9085d22C7bcCB5DD450Ef28e3a" - }, - { - "decimalCount" : 6, - "symbol" : "POWR", - "name" : "Power Ledger", - "contractAddress" : "0x595832f8fc6bf59c85c527fec3740a1b7a361269" - }, - { - "decimalCount" : 18, - "symbol" : "NPXS", - "name" : "Pundi X Token", - "contractAddress" : "0xa15c7ebe1f07caf6bff097d8a589fb8ac49ae5b3" - }, - { - "decimalCount" : 6, - "symbol" : "QASH", - "name" : "QASH", - "contractAddress" : "0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6" - }, - { - "decimalCount" : 8, - "symbol" : "QCX", - "name" : "QuickX Protocol", - "contractAddress" : "0xf9e5af7b42d31d51677c75bbbd37c1986ec79aee", - "customIcon": "qcx" - }, - { - "decimalCount" : 8, - "symbol" : "QRL", - "name" : "QRL", - "contractAddress" : "0x697beac28B09E122C4332D163985e8a73121b97F" - }, - { - "decimalCount" : 18, - "symbol" : "QSP", - "name" : "Quantstamp", - "contractAddress" : "0x99ea4dB9EE77ACD40B119BD1dC4E33e1C070b80d" - }, - { - "decimalCount" : 18, - "symbol" : "RDN", - "name" : "Raiden Network", - "contractAddress" : "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6" - }, - { - "decimalCount" : 18, - "symbol" : "RCC", - "name" : "Reality Clash", - "contractAddress" : "0x9b6443b0fb9c241a7fdac375595cea13e6b7807a" - }, - { - "decimalCount" : 6, - "symbol" : "RC1U03", - "name" : "RentalCoin 1.0", - "contractAddress" : "0x7384db1aaa06364d1e6e67f5434391d3eea2a038" - }, - { - "decimalCount" : 18, - "symbol" : "REQ", - "name" : "Request", - "contractAddress" : "0x8f8221aFbB33998d8584A2B05749bA73c37a938a" - }, - { - "decimalCount" : 0, - "symbol" : "REV", - "name" : "Revain", - "contractAddress" : "0x48f775efbe4f5ece6e0df2f7b5932df56823b990" - }, - { - "decimalCount" : 18, - "symbol" : "RCN", - "name" : "Ripio Credit", - "contractAddress" : "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6" - }, - { - "decimalCount" : 18, - "symbol" : "RVT", - "name" : "Rivetz", - "contractAddress" : "0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244" - }, - { - "decimalCount" : 18, - "symbol" : "RUFF", - "name" : "RUFF", - "contractAddress" : "0xf278c1ca969095ffddded020290cf8b5c424ace2" - }, - { - "decimalCount" : 18, - "symbol" : "SAI", - "name" : "Sai", - "contractAddress" : "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359" - }, - { - "decimalCount" : 8, - "symbol" : "SALT", - "name" : "SALT", - "contractAddress" : "0x4156D3342D5c385a87D264F90653733592000581" - }, - { - "decimalCount" : 18, - "symbol" : "SAN", - "name" : "SAN", - "contractAddress" : "0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098" - }, - { - "decimalCount" : 8, - "symbol" : "SENT", - "name" : "SENTinel", - "contractAddress" : "0xa44e5137293e855b1b7bc7e2c6f8cd796ffcb037" - }, - { - "decimalCount" : 0, - "symbol" : "SNGLS", - "name" : "Singular DTV", - "contractAddress" : "0xaeC2E87E0A235266D9C5ADc9DEb4b2E29b54D009" - }, - { - "decimalCount" : 8, - "symbol" : "AGI", - "name" : "SingularityNET", - "contractAddress" : "0x8eB24319393716668D768dCEC29356ae9CfFe285" - }, - { - "decimalCount" : 18, - "symbol" : "SRN", - "name" : "SIRIN", - "contractAddress" : "0x68d57c9a1C35f63E2c83eE8e49A64e9d70528D25" - }, - { - "decimalCount" : 18, - "symbol" : "SNM", - "name" : "SONM", - "contractAddress" : "0x983F6d60db79ea8cA4eB9968C6aFf8cfA04B3c63" - }, - { - "decimalCount" : 18, - "symbol" : "SNT", - "name" : "Status", - "contractAddress" : "0x744d70FDBE2Ba4CF95131626614a1763DF805B9E" - }, - { - "decimalCount" : 18, - "symbol" : "STK", - "name" : "STK", - "contractAddress" : "0xae73b38d1c9a8b274127ec30160a4927c4d71824" - }, - { - "decimalCount" : 18, - "symbol" : "STQ", - "name" : "Storiqa", - "contractAddress" : "0x5c3a228510d246b78a3765c20221cbf3082b44a4" - }, - { - "decimalCount" : 8, - "symbol" : "STORJ", - "name" : "Storj", - "contractAddress" : "0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC" - }, - { - "decimalCount" : 18, - "symbol" : "STORM", - "name" : "Storm", - "contractAddress" : "0xD0a4b8946Cb52f0661273bfbC6fD0E0C75Fc6433" - }, - { - "decimalCount" : 18, - "symbol" : "STMX", - "name" : "StormX", - "contractAddress" : "0xbE9375C6a420D2eEB258962efB95551A5b722803" - }, - { - "decimalCount" : 18, - "symbol" : "STX", - "name" : "Stox", - "contractAddress" : "0x006BeA43Baa3f7A6f765F14f10A1a1b08334EF45" - }, - { - "decimalCount" : 18, - "symbol" : "SUB", - "name" : "Substratum", - "contractAddress" : "0x8D75959f1E61EC2571aa72798237101F084DE63a" - }, - { - "decimalCount" : 18, - "symbol" : "SNC", - "name" : "SunContract", - "contractAddress" : "0xF4134146AF2d511Dd5EA8cDB1C4AC88C57D60404" - }, - { - "decimalCount" : 18, - "symbol" : "SUSHI", - "name" : "SushiSwap", - "contractAddress" : "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2" - }, - { - "decimalCount" : 2, - "symbol" : "TEL", - "name" : "Telcoin", - "contractAddress" : "0x467bccd9d29f223bce8043b84e8c8b282827790f" - }, - { - "decimalCount" : 18, - "symbol" : "PAY", - "name" : "TenX", - "contractAddress" : "0xB97048628DB6B661D4C2aA833e95Dbe1A905B280" - }, - { - "decimalCount" : 6, - "symbol" : "USDT", - "name" : "Tether USD", - "contractAddress" : "0xdac17f958d2ee523a2206206994597c13d831ec7" - }, - { - "decimalCount" : 18, - "symbol" : "THETA", - "name" : "Theta Token", - "contractAddress" : "0x3883f5e181fccaf8410fa61e12b59bad963fb645" - }, - { - "decimalCount" : 6, - "symbol" : "TRX", - "name" : "TRON", - "contractAddress" : "0xf230b790e05390fc8295f4d3f60332c93bed42e2" - }, - { - "decimalCount" : 18, - "symbol" : "TUSD", - "name" : "TrueUSD", - "contractAddress" : "0x0000000000085d4780B73119b644AE5ecd22b376" - }, - { - "decimalCount" : 8, - "symbol" : "UCASH", - "name" : "UCASH", - "contractAddress" : "0x92e52a1a235d9a103d970901066ce910aacefd37" - }, - { - "decimalCount" : 18, - "symbol" : "UNI", - "name" : "Uniswap", - "contractAddress" : "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984" - }, - { - "decimalCount" : 6, - "symbol" : "USDC", - "name" : "USD Coin", - "contractAddress" : "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" - }, - { - "decimalCount" : 18, - "symbol" : "VIB", - "name" : "Viberate", - "contractAddress" : "0x2C974B2d0BA1716E644c1FC59982a89DDD2fF724" - }, - { - "decimalCount" : 8, - "symbol" : "VGX", - "name" : "Voyager", - "contractAddress" : "0x5af2be193a6abca9c8817001f45744777db30756" - }, - { - "decimalCount" : 18, - "symbol" : "WTC", - "name" : "Waltonchain", - "contractAddress" : "0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74" - }, - { - "decimalCount" : 8, - "symbol" : "WAX", - "name" : "WAX", - "contractAddress" : "0x39Bb259F66E1C59d5ABEF88375979b4D20D98022" - }, - { - "decimalCount" : 18, - "symbol" : "WETH", - "name" : "Wrapped Ether", - "contractAddress" : "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" - }, - { - "decimalCount" : 18, - "symbol" : "WPR", - "name" : "WePower", - "contractAddress" : "0x4CF488387F035FF08c371515562CBa712f9015d4" - }, - { - "decimalCount" : 18, - "symbol" : "WINGS", - "name" : "Wings", - "contractAddress" : "0x667088b212ce3d06a1b553a7221E1fD19000d9aF" - }, - { - "decimalCount" : 6, - "symbol" : "WRC", - "name" : "Worldcore", - "contractAddress" : "0x72adadb447784dd7ab1f472467750fc485e4cb2d" - }, - { - "decimalCount" : 18, - "symbol" : "ZLA", - "name" : "Zilla", - "contractAddress" : "0xfd8971d5e8e1740ce2d0a84095fca4de729d0c16" - }, - { - "decimalCount" : 0, - "symbol" : "GD", - "name" : "Zilla GD", - "contractAddress" : "0xb4cebdb66b3a5183fd4764a25cad1fc109535016" - }, - { - "decimalCount" : 12, - "symbol" : "ZIL", - "name" : "Zilliqa", - "contractAddress" : "0x05f4a42e251f2d52b8ed15E9FEdAacFcEF1FAD27" + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7FF4169a6B5122b664c51c95727d87750eC07c84/logo.png", + "symbol": "10SET", + "name": "10Set Token", + "contractAddress": "0x7FF4169a6B5122b664c51c95727d87750eC07c84", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x111111111117dC0aa78b770fA6A738034120C302/logo.png", + "symbol": "1INCH", + "name": "1INCH Token", + "contractAddress": "0x111111111117dC0aa78b770fA6A738034120C302", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xBBc2AE13b23d715c30720F079fcd9B4a74093505/logo.png", + "symbol": "ERN", + "name": "@EthernityChain $ERN Token", + "contractAddress": "0xBBc2AE13b23d715c30720F079fcd9B4a74093505", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "1ST", + "name": "FirstBlood", + "contractAddress": "0xAf30D2a7E90d7DC361c8C4585e9BB7D2F6f15bc7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9/logo.png", + "symbol": "AAVE", + "name": "Aave Token", + "contractAddress": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "ABT", + "name": "ArcBlock", + "contractAddress": "0xb98d4c97425d9908e66e53a6fdf673acca0be986", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xADE00C28244d5CE17D72E40330B1c318cD12B7c3/logo.png", + "symbol": "ADX", + "name": "AdEx Network", + "contractAddress": "0xADE00C28244d5CE17D72E40330B1c318cD12B7c3", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "AE", + "name": "Aeternity", + "contractAddress": "0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "AION", + "name": "Aion", + "contractAddress": "0x4CEdA7906a5Ed2179785Cd3A40A69ee8bc99C466", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8eB24319393716668D768dCEC29356ae9CfFe285/logo.png", + "symbol": "AGI", + "name": "SingularityNET Token", + "contractAddress": "0x8eB24319393716668D768dCEC29356ae9CfFe285", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x626E8036dEB333b408Be468F951bdB42433cBF18/logo.png", + "symbol": "AIOZ", + "name": "AIOZ Network", + "contractAddress": "0x626E8036dEB333b408Be468F951bdB42433cBF18", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x00a8b738E453fFd858a7edf03bcCfe20412f0Eb0/logo.png", + "symbol": "ALBT", + "name": "AllianceBlock Token", + "contractAddress": "0x00a8b738E453fFd858a7edf03bcCfe20412f0Eb0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "AMLT", + "name": "AMLT by Coinfirm", + "contractAddress": "0xca0e7269600d353f70b14ad118a49575455c0f2f", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x95a4492F028aa1fd432Ea71146b433E7B4446611/logo.png", + "symbol": "APY", + "name": "APY Governance Token", + "contractAddress": "0x95a4492F028aa1fd432Ea71146b433E7B4446611", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "ARN", + "name": "Aeron", + "contractAddress": "0xBA5F11b16B155792Cf3B2E6880E8706859A8AEB6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 4, + "symbol": "AST", + "name": "Airswap", + "contractAddress": "0x27054b13b1b798b345b591a4d22e6562d47ea75a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "AVM", + "name": "AVM Ecosystem", + "contractAddress": "0x74004a7227615fb52b82d17ffabfa376907d8a4d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "ELF", + "name": "Aelf", + "contractAddress": "0xbf2179859fc6d5bee9bf9158632dc51678a4100e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "AMB", + "name": "Amber", + "contractAddress": "0x4dc3643dbc642b72c158e7f3d2ff232df61cb6ce", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xfF20817765cB7f73d4bde2e66e067E58D11095C2/logo.png", + "symbol": "AMP", + "name": "Amp", + "contractAddress": "0xfF20817765cB7f73d4bde2e66e067E58D11095C2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets//logo.png", + "symbol": "AMPL", + "name": "Ampleforth", + "contractAddress": "0xD46bA6D942050d489DBd938a2C909A5d5039A161", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa117000000f279D81A1D3cc75430fAA017FA5A2e/logo.png", + "symbol": "ANT", + "name": "Aragon Network Token", + "contractAddress": "0xa117000000f279D81A1D3cc75430fAA017FA5A2e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "APPC", + "name": "AppCoins", + "contractAddress": "0x1a7a8bd9106f2b8d977e08582dc7d24c723ab0db", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1337DEF16F9B486fAEd0293eb623Dc8395dFE46a/logo.png", + "symbol": "ARMOR", + "name": "Armor", + "contractAddress": "0x1337DEF16F9B486fAEd0293eb623Dc8395dFE46a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 0, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdacD69347dE42baBfAEcD09dC88958378780FB62/logo.png", + "symbol": "ATRI", + "name": "AtariToken", + "contractAddress": "0xdacD69347dE42baBfAEcD09dC88958378780FB62", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "ATMI", + "name": "Atonomi", + "contractAddress": "0x97aeb5066e1a590e868b511457beb6fe99d329f5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998/logo.png", + "symbol": "AUDIO", + "name": "Audius", + "contractAddress": "0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "AUTO", + "name": "CUBE", + "contractAddress": "0x622dFfCc4e83C64ba959530A5a5580687a57581b", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF5D669627376EBd411E34b98F19C868c8ABA5ADA/logo.png", + "symbol": "AXS", + "name": "Axie Infinity", + "contractAddress": "0xF5D669627376EBd411E34b98F19C868c8ABA5ADA", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1C9491865a1DE77C5b6e19d2E6a5F1D7a6F2b25F/logo.png", + "symbol": "MATTER", + "name": "Antimatter.Finance Governance Token", + "contractAddress": "0x1C9491865a1DE77C5b6e19d2E6a5F1D7a6F2b25F", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x71F85B2E46976bD21302B64329868fd15eb0D127/logo.png", + "symbol": "AXN", + "name": "Axion", + "contractAddress": "0x71F85B2E46976bD21302B64329868fd15eb0D127", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xba100000625a3754423978a60c9317c58a424e3D/logo.png", + "symbol": "BAL", + "name": "Balancer", + "contractAddress": "0xba100000625a3754423978a60c9317c58a424e3D", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "BIX", + "name": "BIX Token", + "contractAddress": "0xb3104b4b9da82025e8b9f8fb28b3553ce2f67069", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5Dc02Ea99285E17656b8350722694c35154DB1E8/logo.png", + "symbol": "BOND", + "name": "BOND", + "contractAddress": "0x5Dc02Ea99285E17656b8350722694c35154DB1E8", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "BRD", + "name": "BRD Token", + "contractAddress": "0x558ec3152e2eb2174905cd19aea4e34a23de9ad6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "BNT", + "name": "Bancor", + "contractAddress": "0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55/logo.png", + "symbol": "BAND", + "name": "BandToken", + "contractAddress": "0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x54C9EA2E9C9E8eD865Db4A4ce6711C2a0d5063Ba/logo.png", + "symbol": "BART", + "name": "BarterTrade", + "contractAddress": "0x54C9EA2E9C9E8eD865Db4A4ce6711C2a0d5063Ba", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x07150e919B4De5fD6a63DE1F9384828396f25fDC/logo.png", + "symbol": "BASE", + "name": "Base Protocol", + "contractAddress": "0x07150e919B4De5fD6a63DE1F9384828396f25fDC", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0D8775F648430679A709E98d2b0Cb6250d2887EF/logo.png", + "symbol": "BAT", + "name": "Basic Attention Token", + "contractAddress": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA91ac63D040dEB1b7A5E4d4134aD23eb0ba07e14/logo.png", + "symbol": "BEL", + "name": "Bella", + "contractAddress": "0xA91ac63D040dEB1b7A5E4d4134aD23eb0ba07e14", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "BNB", + "name": "Binance Coin", + "contractAddress": "0xb8c77482e45f1f44de1745f52c74426c631bdd52", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "BUSD", + "name": "Binance USD", + "contractAddress": "0x4fabb145d64652a948d72533023f6e7a623c7c53", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x67c597624B17b16fb77959217360B7cD18284253/logo.png", + "symbol": "MARK", + "name": "Benchmark", + "contractAddress": "0x67c597624B17b16fb77959217360B7cD18284253", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7671904eed7f10808B664fc30BB8693FD7237abF/logo.png", + "symbol": "BBR", + "name": "BitberryToken", + "contractAddress": "0x7671904eed7f10808B664fc30BB8693FD7237abF", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xCF3C8Be2e2C42331Da80EF210e9B1b307C03d36A/logo.png", + "symbol": "BEPRO", + "name": "BetProtocolToken", + "contractAddress": "0xCF3C8Be2e2C42331Da80EF210e9B1b307C03d36A", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0c7D5ae016f806603CB1782bEa29AC69471CAb9c/logo.png", + "symbol": "BFC", + "name": "Bifrost", + "contractAddress": "0x0c7D5ae016f806603CB1782bEa29AC69471CAb9c", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9BE89D2a4cd102D8Fecc6BF9dA793be995C22541/logo.png", + "symbol": "BBTC", + "name": "Binance Wrapped BTC", + "contractAddress": "0x9BE89D2a4cd102D8Fecc6BF9dA793be995C22541", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x25e1474170c4c0aA64fa98123bdc8dB49D7802fa/logo.png", + "symbol": "BID", + "name": "Bidao", + "contractAddress": "0x25e1474170c4c0aA64fa98123bdc8dB49D7802fa", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x70401dFD142A16dC7031c56E862Fc88Cb9537Ce0/logo.png", + "symbol": "BIRD", + "name": "Bird.Money", + "contractAddress": "0x70401dFD142A16dC7031c56E862Fc88Cb9537Ce0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xAec7e1f531Bb09115103C53ba76829910Ec48966/logo.png", + "symbol": "BLANK", + "name": "Blank Token", + "contractAddress": "0xAec7e1f531Bb09115103C53ba76829910Ec48966", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "BLZ", + "name": "Bluzelle", + "contractAddress": "0x5732046a883704404f284ce41ffadd5b007fd668", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x725C263e32c72dDC3A19bEa12C5a0479a81eE688/logo.png", + "symbol": "BMI", + "name": "Bridge Mutual", + "contractAddress": "0x725C263e32c72dDC3A19bEa12C5a0479a81eE688", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD2dDa223b2617cB616c1580db421e4cFAe6a8a85/logo.png", + "symbol": "BONDLY", + "name": "Bondly Token", + "contractAddress": "0xD2dDa223b2617cB616c1580db421e4cFAe6a8a85", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "BTM", + "name": "Bytom", + "contractAddress": "0xcb97e65f07da24d46bcdd078ebebd7c6e6e3d750", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CANDY", + "name": "Candy", + "contractAddress": "0xf2eab3a2034d3f6b63734d2e08262040e3ff7b48", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x954b890704693af242613edEf1B603825afcD708/logo.png", + "symbol": "CARD", + "name": "Cardstack", + "contractAddress": "0x954b890704693af242613edEf1B603825afcD708", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CAS", + "name": "Cashaa", + "contractAddress": "0xe8780b48bdb05f928697a5e8155f672ed91462f7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CCC", + "name": "Container Crypto Coin", + "contractAddress": "0x9e3359f862b6c7f5c660cfd6d1aa6909b1d9504d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x17aC188e09A7890a1844E5E65471fE8b0CcFadF3/logo.png", + "symbol": "CC10", + "name": "Cryptocurrency Top 10 Tokens Index", + "contractAddress": "0x17aC188e09A7890a1844E5E65471fE8b0CcFadF3", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x26c8AFBBFE1EBaca03C2bB082E69D0476Bffe099/logo.png", + "symbol": "CELL", + "name": "Cellframe Token", + "contractAddress": "0x26c8AFBBFE1EBaca03C2bB082E69D0476Bffe099", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 4, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d/logo.png", + "symbol": "CEL", + "name": "Celsius", + "contractAddress": "0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CFI", + "name": "Cofound.it", + "contractAddress": "0x12FEF5e57bF45873Cd9B62E9DBd7BFb99e32D73e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC4C2614E694cF534D407Ee49F8E44D125E4681c4/logo.png", + "symbol": "CHAIN", + "name": "Chain Games", + "contractAddress": "0xC4C2614E694cF534D407Ee49F8E44D125E4681c4", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x63b4f3e3fa4e438698CE330e365E831F7cCD1eF4/logo.png", + "symbol": "CFi", + "name": "CyberFi Token", + "contractAddress": "0x63b4f3e3fa4e438698CE330e365E831F7cCD1eF4", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CNN", + "name": "CNN Token", + "contractAddress": "0x8713d26637cf49e1b6b4a7ce57106aabc9325343", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xDDB3422497E61e13543BeA06989C0789117555c5/logo.png", + "symbol": "COTI", + "name": "COTI Token", + "contractAddress": "0xDDB3422497E61e13543BeA06989C0789117555c5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CSP", + "name": "Caspian", + "contractAddress": "0xa6446d655a0c34bc4f05042ee88170d056cbaf45", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1fE24F25b1Cf609B9c4e7E12D802e3640dFA5e43/logo.png", + "symbol": "CGG", + "name": "ChainGuardians Governance Token", + "contractAddress": "0x1fE24F25b1Cf609B9c4e7E12D802e3640dFA5e43", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CMT", + "name": "CyberMiles", + "contractAddress": "0xf85fEea2FdD81d51177F6b8F35F0e6734Ce45F5F", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CND", + "name": "Cindicator", + "contractAddress": "0xd4c435f5b09f855c3317c8524cb1f586e42795fa", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "CVC", + "name": "Civic", + "contractAddress": "0x41e5560054824ea6b0732e656e3ad64e20e94e45", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x69692D3345010a207b759a7D1af6fc7F38b35c5E/logo.png", + "symbol": "CHADS", + "name": "chads.vc", + "contractAddress": "0x69692D3345010a207b759a7D1af6fc7F38b35c5E", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x514910771AF9Ca656af840dff83E8264EcF986CA/logo.png", + "symbol": "Link", + "name": "ChainLink", + "contractAddress": "0x514910771AF9Ca656af840dff83E8264EcF986CA", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "TIME", + "name": "Chronobank", + "contractAddress": "0x6531f133e6DeeBe7F2dcE5A0441aA7ef330B4e53", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xE61fDAF474Fac07063f2234Fb9e60C1163Cfa850/logo.png", + "symbol": "COIN", + "name": "Coin Utility Token", + "contractAddress": "0xE61fDAF474Fac07063f2234Fb9e60C1163Cfa850", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xc00e94Cb662C3520282E6f5717214004A7f26888/logo.png", + "symbol": "COMP", + "name": "Compound", + "contractAddress": "0xc00e94Cb662C3520282E6f5717214004A7f26888", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x38e4adB44ef08F22F5B5b76A8f0c2d0dCbE7DcA1/logo.png", + "symbol": "CVP", + "name": "Concentrated Voting Power", + "contractAddress": "0x38e4adB44ef08F22F5B5b76A8f0c2d0dCbE7DcA1", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xc834Fa996fA3BeC7aAD3693af486ae53D8aA8B50/logo.png", + "symbol": "CONV", + "name": "Convergence", + "contractAddress": "0xc834Fa996fA3BeC7aAD3693af486ae53D8aA8B50", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x62359Ed7505Efc61FF1D56fEF82158CcaffA23D7/logo.png", + "symbol": "CORE", + "name": "cVault.finance", + "contractAddress": "0x62359Ed7505Efc61FF1D56fEF82158CcaffA23D7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2ba592F78dB6436527729929AAf6c908497cB200/logo.png", + "symbol": "CREAM", + "name": "Cream", + "contractAddress": "0x2ba592F78dB6436527729929AAf6c908497cB200", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "symbol": "CS", + "name": "Credits", + "contractAddress": "0x46b9ad944d1059450da1163511069c718f699d31", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xaC0104Cca91D167873B8601d2e71EB3D4D8c33e0/logo.png", + "symbol": "CWS", + "name": "Crowns", + "contractAddress": "0xaC0104Cca91D167873B8601d2e71EB3D4D8c33e0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "CRPT", + "name": "Crypterium", + "contractAddress": "0x08389495d7456e1951ddf7c3a1314a4bfb646d8b", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0f51bb10119727a7e5eA3538074fb341F56B09Ad/logo.png", + "symbol": "DAO", + "name": "DAO Maker Token", + "contractAddress": "0x0f51bb10119727a7e5eA3538074fb341F56B09Ad", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x26CE25148832C04f3d7F26F32478a9fe55197166/logo.png", + "symbol": "DEXT", + "name": "DEXTools", + "contractAddress": "0x26CE25148832C04f3d7F26F32478a9fe55197166", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B175474E89094C44Da98b954EedeAC495271d0F/logo.png", + "symbol": "DAI", + "name": "Dai Stablecoin", + "contractAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xFbEEa1C75E4c4465CB2FCCc9c6d6afe984558E20/logo.png", + "symbol": "DDIM", + "name": "DuckDaoDime", + "contractAddress": "0xFbEEa1C75E4c4465CB2FCCc9c6d6afe984558E20", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xE1c7E30C42C24582888C758984f6e382096786bd/logo.png", + "symbol": "XCUR", + "name": "Curate", + "contractAddress": "0xE1c7E30C42C24582888C758984f6e382096786bd", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD533a949740bb3306d119CC777fa900bA034cd52/logo.png", + "symbol": "CRV", + "name": "Curve DAO Token", + "contractAddress": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x30f271C9E86D2B7d00a6376Cd96A1cFBD5F0b9b3/logo.png", + "symbol": "DEC", + "name": "Decentr", + "contractAddress": "0x30f271C9E86D2B7d00a6376Cd96A1cFBD5F0b9b3", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9EA3b5b4EC044b70375236A281986106457b20EF/logo.png", + "symbol": "DELTA", + "name": "Delta Financial", + "contractAddress": "0x9EA3b5b4EC044b70375236A281986106457b20EF", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "DENT", + "name": "DENT", + "contractAddress": "0x3597bfd533a99c9aa083587b074434e61eb0a258", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xd379700999F4805Ce80aa32DB46A94dF64561108/logo.png", + "symbol": "DETS", + "name": "Dextrust", + "contractAddress": "0xd379700999F4805Ce80aa32DB46A94dF64561108", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5cAf454Ba92e6F2c929DF14667Ee360eD9fD5b26/logo.png", + "symbol": "DEV", + "name": "Dev", + "contractAddress": "0x5cAf454Ba92e6F2c929DF14667Ee360eD9fD5b26", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5F64Ab1544D28732F0A24F4713c2C8ec0dA089f0/logo.png", + "symbol": "DEXTF", + "name": "DEXTF Token", + "contractAddress": "0x5F64Ab1544D28732F0A24F4713c2C8ec0dA089f0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xc719d010B63E5bbF2C0551872CD5316ED26AcD83/logo.png", + "symbol": "DIP", + "name": "Decentralized Insurance Protocol", + "contractAddress": "0xc719d010B63E5bbF2C0551872CD5316ED26AcD83", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x26E43759551333e57F073bb0772F50329A957b30/logo.png", + "symbol": "DGVC", + "name": "DegenVC", + "contractAddress": "0x26E43759551333e57F073bb0772F50329A957b30", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x152687Bc4A7FCC89049cF119F9ac3e5aCF2eE7ef/logo.png", + "symbol": "DHC", + "name": "DeltaHub Community", + "contractAddress": "0x152687Bc4A7FCC89049cF119F9ac3e5aCF2eE7ef", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x431ad2ff6a9C365805eBaD47Ee021148d6f7DBe0/logo.png", + "symbol": "DF", + "name": "dForce", + "contractAddress": "0x431ad2ff6a9C365805eBaD47Ee021148d6f7DBe0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "symbol": "DGD", + "name": "DigixDAO", + "contractAddress": "0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x88EF27e69108B2633F8E1C184CC37940A075cC02/logo.png", + "symbol": "DEGO", + "name": "dego.finance", + "contractAddress": "0x88EF27e69108B2633F8E1C184CC37940A075cC02", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419/logo.png", + "symbol": "DIA", + "name": "DIA", + "contractAddress": "0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xEd91879919B71bB6905f23af0A68d231EcF87b14/logo.png", + "symbol": "DMG", + "name": "DMM: Governance", + "contractAddress": "0xEd91879919B71bB6905f23af0A68d231EcF87b14", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9cEB84f92A0561fa3Cc4132aB9c0b76A59787544/logo.png", + "symbol": "DOKI", + "name": "DokiDokiFinance", + "contractAddress": "0x9cEB84f92A0561fa3Cc4132aB9c0b76A59787544", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "DOV", + "name": "Dovu", + "contractAddress": "0xac3211a5025414af2866ff09c23fc18bc97e79b1", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "DRGN", + "name": "Dragon", + "contractAddress": "0x419c4db4b9e25d6db2ad9691ccb832c8d9fda05e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "DNT", + "name": "district0x", + "contractAddress": "0x0abdace70d3790235af448c88547603b945604ea", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x3aFfCCa64c2A6f4e3B6Bd9c64CD2C969EFd1ECBe/logo.png", + "symbol": "DSLA", + "name": "DSLA", + "contractAddress": "0x3aFfCCa64c2A6f4e3B6Bd9c64CD2C969EFd1ECBe", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC0bA369c8Db6eB3924965e5c4FD0b4C1B91e305F/logo.png", + "symbol": "DUCK", + "name": "DLP Duck Token", + "contractAddress": "0xC0bA369c8Db6eB3924965e5c4FD0b4C1B91e305F", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x961C8c0B1aaD0c0b10a51FeF6a867E3091BCef17/logo.png", + "symbol": "DYP", + "name": "DeFiYieldProtocol", + "contractAddress": "0x961C8c0B1aaD0c0b10a51FeF6a867E3091BCef17", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x740623d2c797b7D8D1EcB98e9b4Afcf99Ec31E14/logo.png", + "symbol": "DYT", + "name": "DoYourTip", + "contractAddress": "0x740623d2c797b7D8D1EcB98e9b4Afcf99Ec31E14", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "EOS", + "name": "EOS", + "contractAddress": "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD/logo.png", + "symbol": "ETH2x-FLI", + "name": "ETH 2x Flexible Leverage Index", + "contractAddress": "0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 2, + "symbol": "EUR.AVM", + "name": "EUR AVM", + "contractAddress": "0xF01Cd2f1c9E42c509d309aC8C5b29B6dA8E64b1a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 0, + "symbol": "EDG", + "name": "Edgeless", + "contractAddress": "0x08711D3B02C8758F2FB3ab4e80228418a7F8e39c", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "EDO", + "name": "Eidoo", + "contractAddress": "0xced4e93198734ddaff8492d525bd258d49eb388e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x178c820f862B14f316509ec36b13123DA19A6054/logo.png", + "symbol": "EWTB", + "name": "Energy Web Token Bridged", + "contractAddress": "0x178c820f862B14f316509ec36b13123DA19A6054", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c/logo.png", + "symbol": "ENJ", + "name": "Enjin Coin", + "contractAddress": "0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa0246c9032bC3A600820415aE600c6388619A14D/logo.png", + "symbol": "FARM", + "name": "FARM Reward Token", + "contractAddress": "0xa0246c9032bC3A600820415aE600c6388619A14D", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xE5CAeF4Af8780E59Df925470b050Fb23C43CA68C/logo.png", + "symbol": "FRM", + "name": "Ferrum Network Token", + "contractAddress": "0xE5CAeF4Af8780E59Df925470b050Fb23C43CA68C", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "FXC", + "name": "Flexacoin", + "contractAddress": "0x4a57E687b9126435a9B19E4A802113e266AdeBde", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8a40c222996f9F3431f63Bf80244C36822060f12/logo.png", + "symbol": "FXF", + "name": "Finxflo", + "contractAddress": "0x8a40c222996f9F3431f63Bf80244C36822060f12", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x853d955aCEf822Db058eb8505911ED77F175b99e/logo.png", + "symbol": "FRAX", + "name": "Frax", + "contractAddress": "0x853d955aCEf822Db058eb8505911ED77F175b99e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x29502fE4d233EF0b45C3647101Fa1252cE0634BD/logo.png", + "symbol": "FROGE", + "name": "Froge Finance", + "contractAddress": "0x29502fE4d233EF0b45C3647101Fa1252cE0634BD", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b/logo.png", + "symbol": "FUN", + "name": "FunFair", + "contractAddress": "0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8c15Ef5b4B21951d50E53E4fbdA8298FFAD25057/logo.png", + "symbol": "FX", + "name": "Function X", + "contractAddress": "0x8c15Ef5b4B21951d50E53E4fbdA8298FFAD25057", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6BFf2fE249601ed0Db3a87424a2E923118BB0312/logo.png", + "symbol": "FYZ", + "name": "Fyooz", + "contractAddress": "0x6BFf2fE249601ed0Db3a87424a2E923118BB0312", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8a854288a5976036A725879164Ca3e91d30c6A1B/logo.png", + "symbol": "GET", + "name": "GET", + "contractAddress": "0x8a854288a5976036A725879164Ca3e91d30c6A1B", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "symbol": "GNX", + "name": "Genaro Network", + "contractAddress": "0x6ec8a24cabdc339a06a172f8223ea557055adaa5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9F9c8ec3534c3cE16F928381372BfbFBFb9F4D24/logo.png", + "symbol": "GLQ", + "name": "GraphLinq", + "contractAddress": "0x9F9c8ec3534c3cE16F928381372BfbFBFb9F4D24", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6810e776880C02933D47DB1b9fc05908e5386b96/logo.png", + "symbol": "GNO", + "name": "Gnosis Token", + "contractAddress": "0x6810e776880C02933D47DB1b9fc05908e5386b96", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "GNT", + "name": "Golem", + "contractAddress": "0xa74476443119A942dE498590Fe1f2454d7D4aC0d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xc3771d47E2Ab5A519E2917E61e23078d0C05Ed7f/logo.png", + "symbol": "GTH", + "name": "Gather", + "contractAddress": "0xc3771d47E2Ab5A519E2917E61e23078d0C05Ed7f", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 2, + "symbol": "GUSD", + "name": "Gemini Dollar", + "contractAddress": "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "GVT", + "name": "Genesis Vision", + "contractAddress": "0x103c3A209da59d3E7C4A89307e66521e081CFDF0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xbEa98c05eEAe2f3bC8c3565Db7551Eb738c8CCAb/logo.png", + "symbol": "GYSR", + "name": "Geyser", + "contractAddress": "0xbEa98c05eEAe2f3bC8c3565Db7551Eb738c8CCAb", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 0, + "symbol": "GD", + "name": "Zilla GD", + "contractAddress": "0xb4cebdb66b3a5183fd4764a25cad1fc109535016", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x09e64c2B61a5f1690Ee6fbeD9baf5D6990F8dFd0/logo.png", + "symbol": "GRO", + "name": "Growth", + "contractAddress": "0x09e64c2B61a5f1690Ee6fbeD9baf5D6990F8dFd0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xc944E90C64B2c07662A292be6244BDf05Cda44a7/logo.png", + "symbol": "GRT", + "name": "Graph Token", + "contractAddress": "0xc944E90C64B2c07662A292be6244BDf05Cda44a7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 3, + "symbol": "GUP", + "name": "Matchpool", + "contractAddress": "0xf7B098298f7C69Fc14610bf71d5e02c60792894C", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39/logo.png", + "symbol": "HEX", + "name": "HEX", + "contractAddress": "0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "HPB", + "name": "HPBCoin", + "contractAddress": "0x38c6a68304cdefb9bec48bbfaaba5c5b47818bb2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x584bC13c7D411c00c01A62e8019472dE68768430/logo.png", + "symbol": "HEGIC", + "name": "Hegic", + "contractAddress": "0x584bC13c7D411c00c01A62e8019472dE68768430", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xEEF9f339514298C6A857EfCfC1A762aF84438dEE/logo.png", + "symbol": "HEZ", + "name": "Hermez Network Token", + "contractAddress": "0xEEF9f339514298C6A857EfCfC1A762aF84438dEE", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6c6EE5e31d828De241282B9606C8e98Ea48526E2/logo.png", + "symbol": "HOT", + "name": "HoloToken", + "contractAddress": "0x6c6EE5e31d828De241282B9606C8e98Ea48526E2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "HYDRO", + "name": "Hydro", + "contractAddress": "0xebbdf302c940c6bfd49c6b165f457fdb324649bc", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "ICX", + "name": "ICON", + "contractAddress": "0xb5a5f22694352c15b00323844ad545abb2b11028", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "ICN", + "name": "ICONOMI", + "contractAddress": "0x888666CA69E0f178DED6D75b5726Cee99A87D698", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xEBd9D99A3982d547C5Bb4DB7E3b1F9F14b67Eb83/logo.png", + "symbol": "ID", + "name": "Everest ID", + "contractAddress": "0xEBd9D99A3982d547C5Bb4DB7E3b1F9F14b67Eb83", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x72630B1e3B42874bf335020Ba0249e3E9e47Bafc/logo.png", + "symbol": "EPAN", + "name": "Paypolitan Token", + "contractAddress": "0x72630B1e3B42874bf335020Ba0249e3E9e47Bafc", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "GBX", + "name": "Globitex", + "contractAddress": "0x12fcd6463e66974cf7bbc24ffc4d40d6be458283", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xf6537FE0df7F0Cc0985Cf00792CC98249E73EFa0/logo.png", + "symbol": "GIV", + "name": "GIVToken", + "contractAddress": "0xf6537FE0df7F0Cc0985Cf00792CC98249E73EFa0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xeEAA40B28A2d1b0B08f6f97bB1DD4B75316c6107/logo.png", + "symbol": "GOVI", + "name": "GOVI", + "contractAddress": "0xeEAA40B28A2d1b0B08f6f97bB1DD4B75316c6107", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 5, + "symbol": "GTO", + "name": "Gifto", + "contractAddress": "0xc5bbae50781be1669306b9e001eff57a2957b09d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "IOST", + "name": "IOStoken", + "contractAddress": "0xfa1a856cfa3409cfa145fa4e20eb270df3eb21ab", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "ITC", + "name": "IOT Chain", + "contractAddress": "0x5e6b6d9abad9093fdc861ea1600eba1b355cd940", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xe28b3B32B6c345A34Ff64674606124Dd5Aceca30/logo.png", + "symbol": "INJ", + "name": "Injective Token", + "contractAddress": "0xe28b3B32B6c345A34Ff64674606124Dd5Aceca30", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4B1E80cAC91e2216EEb63e29B957eB91Ae9C2Be8/logo.png", + "symbol": "JUP", + "name": "Jupiter", + "contractAddress": "0x4B1E80cAC91e2216EEb63e29B957eB91Ae9C2Be8", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x85Eee30c52B0b379b046Fb0F85F4f3Dc3009aFEC/logo.png", + "symbol": "KEEP", + "name": "KEEP Token", + "contractAddress": "0x85Eee30c52B0b379b046Fb0F85F4f3Dc3009aFEC", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x16980b3B4a3f9D89E33311B5aa8f80303E5ca4F8/logo.png", + "symbol": "KEX", + "name": "KIRA Network", + "contractAddress": "0x16980b3B4a3f9D89E33311B5aa8f80303E5ca4F8", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "KIN", + "name": "Kin", + "contractAddress": "0x818Fc6C2Ec5986bc6E2CBf00939d90556aB12ce5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xCbfef8fdd706cde6F208460f2Bf39Aa9c785F05D/logo.png", + "symbol": "KINE", + "name": "Kine Governance Token", + "contractAddress": "0xCbfef8fdd706cde6F208460f2Bf39Aa9c785F05D", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44/logo.png", + "symbol": "KP3R", + "name": "Keep3rV1", + "contractAddress": "0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1dD80016e3d4ae146Ee2EBB484e8edD92dacC4ce/logo.png", + "symbol": "LEAD", + "name": "Lead Token", + "contractAddress": "0x1dD80016e3d4ae146Ee2EBB484e8edD92dacC4ce", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0fF6ffcFDa92c53F615a4A75D982f399C989366b/logo.png", + "symbol": "LAYER", + "name": "Unilayer", + "contractAddress": "0x0fF6ffcFDa92c53F615a4A75D982f399C989366b", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD/logo.png", + "symbol": "LRC", + "name": "LoopringCoin V2", + "contractAddress": "0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x3593D125a4f7849a1B059E64F4517A86Dd60c95d/logo.png", + "symbol": "OM", + "name": "MANTRA DAO", + "contractAddress": "0x3593D125a4f7849a1B059E64F4517A86Dd60c95d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "MAN", + "name": "MATRIX AI Network", + "contractAddress": "0xe25bcec5d3801ce3a794079bf94adf1b8ccd802d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "MYST", + "name": "Mysterium", + "contractAddress": "0xa645264C5603E96c3b0B078cdab68733794B0A71", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "NULS", + "name": "Nuls", + "contractAddress": "0xb91318f35bdb262e9423bc7c7c2a3a93dd93c92c", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xfAd45E47083e4607302aa43c65fB3106F1cd7607/logo.png", + "symbol": "HOGE", + "name": "hoge.finance", + "contractAddress": "0xfAd45E47083e4607302aa43c65fB3106F1cd7607", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "IXT", + "name": "iXledger", + "contractAddress": "0xfca47962d45adfdfd1ab2d972315db4ce7ccf094", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB9d99C33eA2d86EC5eC6b8A4dD816EBBA64404AF/logo.png", + "symbol": "K21", + "name": "k21.kanon.art", + "contractAddress": "0xB9d99C33eA2d86EC5eC6b8A4dD816EBBA64404AF", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0F5D2fB29fb7d3CFeE444a200298f468908cC942/logo.png", + "symbol": "MANA", + "name": "Decentraland MANA", + "contractAddress": "0x0F5D2fB29fb7d3CFeE444a200298f468908cC942", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b/logo.png", + "symbol": "DPI", + "name": "DefiPulse Index", + "contractAddress": "0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "ENG", + "name": "Enigma", + "contractAddress": "0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 16, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD6c67B93a7b248dF608a653d82a100556144c5DA/logo.png", + "symbol": "EXNT", + "name": "ExNetwork Community Token", + "contractAddress": "0xD6c67B93a7b248dF608a653d82a100556144c5DA", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xfffffffFf15AbF397dA76f1dcc1A1604F45126DB/logo.png", + "symbol": "FSW", + "name": "FalconSwap Token", + "contractAddress": "0xfffffffFf15AbF397dA76f1dcc1A1604F45126DB", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF4d861575ecC9493420A3f5a14F85B13f0b50EB3/logo.png", + "symbol": "FCL", + "name": "Fractal Protocol Token", + "contractAddress": "0xF4d861575ecC9493420A3f5a14F85B13f0b50EB3", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x956F47F50A910163D8BF957Cf5846D573E7f87CA/logo.png", + "symbol": "FEI", + "name": "Fei USD", + "contractAddress": "0x956F47F50A910163D8BF957Cf5846D573E7f87CA", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "FSN", + "name": "Fusion", + "contractAddress": "0xd0352a019e9ab9d757776f532377aaebd36fd541", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdd974D5C2e2928deA5F71b9825b8b646686BD200/logo.png", + "symbol": "KNC", + "name": "Kyber Network Crystal", + "contractAddress": "0xdd974D5C2e2928deA5F71b9825b8b646686BD200", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x67B6D479c7bB412C54e03dCA8E1Bc6740ce6b99C/logo.png", + "symbol": "KYL", + "name": "Kylin Network", + "contractAddress": "0x67B6D479c7bB412C54e03dCA8E1Bc6740ce6b99C", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xaE697F994Fc5eBC000F8e22EbFfeE04612f98A0d/logo.png", + "symbol": "LGCY", + "name": "LGCY Network", + "contractAddress": "0xaE697F994Fc5eBC000F8e22EbFfeE04612f98A0d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0a50C93c762fDD6E56D86215C24AaAD43aB629aa/logo.png", + "symbol": "LGO", + "name": "LGO Token", + "contractAddress": "0x0a50C93c762fDD6E56D86215C24AaAD43aB629aa", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6149C26Cd2f7b5CCdb32029aF817123F6E37Df5B/logo.png", + "symbol": "LPOOL", + "name": "Launchpool token", + "contractAddress": "0x6149C26Cd2f7b5CCdb32029aF817123F6E37Df5B", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x80fB784B7eD66730e8b1DBd9820aFD29931aab03/logo.png", + "symbol": "LEND", + "name": "Lend", + "contractAddress": "0x80fB784B7eD66730e8b1DBd9820aFD29931aab03", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0000000000095413afC295d19EDeb1Ad7B71c952/logo.png", + "symbol": "LON", + "name": "Tokenlon", + "contractAddress": "0x0000000000095413afC295d19EDeb1Ad7B71c952", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4de2573e27E648607B50e1Cfff921A33E4A34405/logo.png", + "symbol": "LST", + "name": "Lendroid Support Token", + "contractAddress": "0x4de2573e27E648607B50e1Cfff921A33E4A34405", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "LOOM", + "name": "Loom", + "contractAddress": "0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x3DB6Ba6ab6F95efed1a6E794caD492fAAabF294D/logo.png", + "symbol": "LTO", + "name": "LTO Network Token", + "contractAddress": "0x3DB6Ba6ab6F95efed1a6E794caD492fAAabF294D", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA8b919680258d369114910511cc87595aec0be6D/logo.png", + "symbol": "LYXe", + "name": "LUKSO Token", + "contractAddress": "0xA8b919680258d369114910511cc87595aec0be6D", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa393473d64d2F9F026B60b6Df7859A689715d092/logo.png", + "symbol": "LTX", + "name": "Lattice Token", + "contractAddress": "0xa393473d64d2F9F026B60b6Df7859A689715d092", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "LUN", + "name": "Lunyr", + "contractAddress": "0xfa05A73FfE78ef8f1a739473e462c54bae6567D9", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9/logo.png", + "symbol": "LUNA", + "name": "Wrapped LUNA Token", + "contractAddress": "0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0/logo.png", + "symbol": "LUSD", + "name": "LUSD Stablecoin", + "contractAddress": "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB4d930279552397bbA2ee473229f89Ec245bc365/logo.png", + "symbol": "MAHA", + "name": "MahaDAO", + "contractAddress": "0xB4d930279552397bbA2ee473229f89Ec245bc365", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xfC98e825A2264D890F9a1e68ed50E1526abCcacD/logo.png", + "symbol": "MCO2", + "name": "Moss Carbon Credit", + "contractAddress": "0xfC98e825A2264D890F9a1e68ed50E1526abCcacD", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xAd4f86a25bbc20FfB751f2FAC312A0B4d8F88c64/logo.png", + "symbol": "ROOM", + "name": "OptionRoom Token", + "contractAddress": "0xAd4f86a25bbc20FfB751f2FAC312A0B4d8F88c64", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5a666c7d92E5fA7Edcb6390E4efD6d0CDd69cF37/logo.png", + "symbol": "MARSH", + "name": "UnmarshalToken", + "contractAddress": "0x5a666c7d92E5fA7Edcb6390E4efD6d0CDd69cF37", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x69af81e73A73B40adF4f3d4223Cd9b1ECE623074/logo.png", + "symbol": "MASK", + "name": "Mask Network", + "contractAddress": "0x69af81e73A73B40adF4f3d4223Cd9b1ECE623074", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4e352cF164E64ADCBad318C3a1e222E9EBa4Ce42/logo.png", + "symbol": "MCB", + "name": "MCDEX Token", + "contractAddress": "0x4e352cF164E64ADCBad318C3a1e222E9EBa4Ce42", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0/logo.png", + "symbol": "MATIC", + "name": "Matic Token", + "contractAddress": "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD5525D397898e5502075Ea5E830d8914f6F0affe/logo.png", + "symbol": "MEME", + "name": "MEME", + "contractAddress": "0xD5525D397898e5502075Ea5E830d8914f6F0affe", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2/logo.png", + "symbol": "MKR", + "name": "MakerDAO", + "contractAddress": "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2/logo.png", + "symbol": "MTA", + "name": "Meta", + "contractAddress": "0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "MTL", + "name": "Metal", + "contractAddress": "0xF433089366899D83a9f26A773D59ec7eCF30355e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x72e364F2ABdC788b7E918bc238B21f109Cd634D7/logo.png", + "symbol": "MVI", + "name": "Metaverse Index", + "contractAddress": "0x72e364F2ABdC788b7E918bc238B21f109Cd634D7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB26631c6dda06aD89B93C71400D25692de89c068/logo.png", + "symbol": "MINDS", + "name": "Minds", + "contractAddress": "0xB26631c6dda06aD89B93C71400D25692de89c068", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xEA1ea0972fa092dd463f2968F9bB51Cc4c981D71/logo.png", + "symbol": "MOD", + "name": "Modefi", + "contractAddress": "0xEA1ea0972fa092dd463f2968F9bB51Cc4c981D71", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "MCO", + "name": "Monaco", + "contractAddress": "0xB63B606Ac810a52cCa15e44bB630fd42D8d1d83d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "NAS", + "name": "Nebulas", + "contractAddress": "0x5d65D971895Edc438f465c17DB6992698a52318D", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xaAAf91D9b90dF800Df4F55c205fd6989c977E73a/logo.png", + "symbol": "TKN", + "name": "Monolith TKN", + "contractAddress": "0xaAAf91D9b90dF800Df4F55c205fd6989c977E73a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca/logo.png", + "symbol": "NOIA", + "name": "NOIA Token", + "contractAddress": "0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206/logo.png", + "symbol": "NEXO", + "name": "Nexo", + "contractAddress": "0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1cBb83EbcD552D5EBf8131eF8c9CD9d9BAB342bC/logo.png", + "symbol": "NFY", + "name": "Non-Fungible Yearn", + "contractAddress": "0x1cBb83EbcD552D5EBf8131eF8c9CD9d9BAB342bC", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "NMR", + "name": "Numeraire", + "contractAddress": "0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x967da4048cD07aB37855c090aAF366e4ce1b9F48/logo.png", + "symbol": "OCEAN", + "name": "Ocean Protocol", + "contractAddress": "0x967da4048cD07aB37855c090aAF366e4ce1b9F48", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets//logo.png", + "symbol": "OMG", + "name": "OMG Network", + "contractAddress": "0xd26114cd6EE289AccF82350c8d8487fedB8A0C07", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4c11249814f11b9346808179Cf06e71ac328c1b5/logo.png", + "symbol": "ORAI", + "name": "Oraichain Token", + "contractAddress": "0x4c11249814f11b9346808179Cf06e71ac328c1b5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26/logo.png", + "symbol": "OGN", + "name": "OriginToken", + "contractAddress": "0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a/logo.png", + "symbol": "ORN", + "name": "Orion Protocol", + "contractAddress": "0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "OST", + "name": "OST", + "contractAddress": "0x2C4e8f2D746113d0696cE89B35F0d8bF88E0AEcA", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x21BfBDa47A0B4B5b1248c767Ee49F7caA9B23697/logo.png", + "symbol": "OVR", + "name": "OVR", + "contractAddress": "0x21BfBDa47A0B4B5b1248c767Ee49F7caA9B23697", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4575f41308EC1483f3d399aa9a2826d74Da13Deb/logo.png", + "symbol": "OXT", + "name": "Orchid", + "contractAddress": "0x4575f41308EC1483f3d399aa9a2826d74Da13Deb", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1614F18Fc94f47967A3Fbe5FfcD46d4e7Da3D787/logo.png", + "symbol": "PAID", + "name": "PAID Network", + "contractAddress": "0x1614F18Fc94f47967A3Fbe5FfcD46d4e7Da3D787", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8c8687fC965593DFb2F0b4EAeFD55E9D8df348df/logo.png", + "symbol": "PAID", + "name": "PAID Network", + "contractAddress": "0x8c8687fC965593DFb2F0b4EAeFD55E9D8df348df", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x45804880De22913dAFE09f4980848ECE6EcbAf78/logo.png", + "symbol": "PAXG", + "name": "Paxos Gold", + "contractAddress": "0x45804880De22913dAFE09f4980848ECE6EcbAf78", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "PAX", + "name": "Paxos Standard", + "contractAddress": "0x8e870d67f660d95d5be530380d0ec0bd388289e1", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xbC396689893D065F41bc2C6EcbeE5e0085233447/logo.png", + "symbol": "PERP", + "name": "Perpetual", + "contractAddress": "0xbC396689893D065F41bc2C6EcbeE5e0085233447", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x429881672B9AE42b8EbA0E26cD9C73711b891Ca5/logo.png", + "symbol": "PICKLE", + "name": "PickleToken", + "contractAddress": "0x429881672B9AE42b8EbA0E26cD9C73711b891Ca5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d/logo.png", + "symbol": "PNK", + "name": "Pinakion", + "contractAddress": "0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "POE", + "name": "Po.et", + "contractAddress": "0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "PAL", + "name": "PolicyPal Network", + "contractAddress": "0xfeDAE5642668f8636A11987Ff386bfd215F942EE", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8B39B70E39Aa811b69365398e0aACe9bee238AEb/logo.png", + "symbol": "PKF", + "name": "PolkaFoundry", + "contractAddress": "0x8B39B70E39Aa811b69365398e0aACe9bee238AEb", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD478161C952357F05f0292B56012Cd8457F1cfbF/logo.png", + "symbol": "POLK", + "name": "Polkamarkets", + "contractAddress": "0xD478161C952357F05f0292B56012Cd8457F1cfbF", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x83e6f1E41cdd28eAcEB20Cb649155049Fac3D5Aa/logo.png", + "symbol": "POLS", + "name": "PolkastarterToken", + "contractAddress": "0x83e6f1E41cdd28eAcEB20Cb649155049Fac3D5Aa", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "PRL", + "name": "Oyster Pearl", + "contractAddress": "0x1844b21593262668b7248d0f57a220caaba46ab9", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x362bc847A3a9637d3af6624EeC853618a43ed7D2/logo.png", + "symbol": "PRQ", + "name": "Parsiq Token", + "contractAddress": "0x362bc847A3a9637d3af6624EeC853618a43ed7D2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "PTOY", + "name": "Patientory", + "contractAddress": "0x8Ae4BF2C33a8e667de34B54938B0ccD03Eb8CC06", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1796ae0b0fa4862485106a0de9b654eFE301D0b2/logo.png", + "symbol": "PMON", + "name": "Polkamon", + "contractAddress": "0x1796ae0b0fa4862485106a0de9b654eFE301D0b2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "POLY", + "name": "Polymath", + "contractAddress": "0x9992eC3cF6A55b00978cdDF2b27BC6882d88D1eC", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "PPT", + "name": "Populous", + "contractAddress": "0xd4fa1460F537bb9085d22C7bcCB5DD450Ef28e3a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "symbol": "POWR", + "name": "Power Ledger", + "contractAddress": "0x595832f8fc6bf59c85c527fec3740a1b7a361269", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC57d533c50bC22247d49a368880fb49a1caA39F7/logo.png", + "symbol": "PTF", + "name": "PowerTrade Fuel Token", + "contractAddress": "0xC57d533c50bC22247d49a368880fb49a1caA39F7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0CDF9acd87E940837ff21BB40c9fd55F68bba059/logo.png", + "symbol": "MINT", + "name": "Public Mint", + "contractAddress": "0x0CDF9acd87E940837ff21BB40c9fd55F68bba059", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "symbol": "QASH", + "name": "QASH", + "contractAddress": "0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4a220E6096B25EADb88358cb44068A3248254675/logo.png", + "symbol": "QNT", + "name": "Quant", + "contractAddress": "0x4a220E6096B25EADb88358cb44068A3248254675", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6e0daDE58D2d89eBBe7aFc384e3E4f15b70b14D8/logo.png", + "symbol": "QRX", + "name": "QuiverX", + "contractAddress": "0x6e0daDE58D2d89eBBe7aFc384e3E4f15b70b14D8", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x33D0568941C0C64ff7e0FB4fbA0B11BD37deEd9f/logo.png", + "symbol": "RAMP", + "name": "RAMP DEFI", + "contractAddress": "0x33D0568941C0C64ff7e0FB4fbA0B11BD37deEd9f", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "symbol": "RC1U03", + "name": "RentalCoin 1.0", + "contractAddress": "0x7384db1aaa06364d1e6e67f5434391d3eea2a038", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "RDN", + "name": "Raiden Network", + "contractAddress": "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xf1f955016EcbCd7321c7266BccFB96c68ea5E49b/logo.png", + "symbol": "RLY", + "name": "Rally", + "contractAddress": "0xf1f955016EcbCd7321c7266BccFB96c68ea5E49b", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA4EED63db85311E22dF4473f87CcfC3DaDCFA3E3/logo.png", + "symbol": "RBC", + "name": "Rubic", + "contractAddress": "0xA4EED63db85311E22dF4473f87CcfC3DaDCFA3E3", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8f8221aFbB33998d8584A2B05749bA73c37a938a/logo.png", + "symbol": "REQ", + "name": "Request Token", + "contractAddress": "0x8f8221aFbB33998d8584A2B05749bA73c37a938a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8762db106B2c2A0bccB3A80d1Ed41273552616E8/logo.png", + "symbol": "RSR", + "name": "Reserve Rights", + "contractAddress": "0x8762db106B2c2A0bccB3A80d1Ed41273552616E8", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7dE91B204C1C737bcEe6F000AAA6569Cf7061cb7/logo.png", + "symbol": "XRT", + "name": "Robonomics", + "contractAddress": "0x7dE91B204C1C737bcEe6F000AAA6569Cf7061cb7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xCb5f72d37685C3D5aD0bB5F982443BC8FcdF570E/logo.png", + "symbol": "ROOT", + "name": "RootKit", + "contractAddress": "0xCb5f72d37685C3D5aD0bB5F982443BC8FcdF570E", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x3155BA85D5F96b2d030a4966AF206230e46849cb/logo.png", + "symbol": "RUNE", + "name": "THORChain ETH.RUNE", + "contractAddress": "0x3155BA85D5F96b2d030a4966AF206230e46849cb", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "SAN", + "name": "SAN", + "contractAddress": "0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE/logo.png", + "symbol": "SHIB", + "name": "SHIBA INU", + "contractAddress": "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x72e9D9038cE484EE986FEa183f8d8Df93f9aDA13/logo.png", + "symbol": "SMARTCREDIT", + "name": "SMARTCREDIT Token", + "contractAddress": "0x72e9D9038cE484EE986FEa183f8d8Df93f9aDA13", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "SRN", + "name": "SIRIN", + "contractAddress": "0x68d57c9a1C35f63E2c83eE8e49A64e9d70528D25", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "SNM", + "name": "SONM", + "contractAddress": "0x983F6d60db79ea8cA4eB9968C6aFf8cfA04B3c63", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets//logo.png", + "symbol": "SNX", + "name": "Synthetix Network Token", + "contractAddress": "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x23B608675a2B2fB1890d3ABBd85c5775c51691d5/logo.png", + "symbol": "SOCKS", + "name": "Unisocks Edition 0", + "contractAddress": "0x23B608675a2B2fB1890d3ABBd85c5775c51691d5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0Ae055097C6d159879521C384F1D2123D1f195e6/logo.png", + "symbol": "STAKE", + "name": "xDai", + "contractAddress": "0x0Ae055097C6d159879521C384F1D2123D1f195e6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "SUB", + "name": "Substratum", + "contractAddress": "0x8D75959f1E61EC2571aa72798237101F084DE63a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xEa319e87Cf06203DAe107Dd8E5672175e3Ee976c/logo.png", + "symbol": "SURF", + "name": "SURF.Finance", + "contractAddress": "0xEa319e87Cf06203DAe107Dd8E5672175e3Ee976c", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xCC4304A31d09258b0029eA7FE63d032f52e44EFe/logo.png", + "symbol": "SWAP", + "name": "TrustSwap Token", + "contractAddress": "0xCC4304A31d09258b0029eA7FE63d032f52e44EFe", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB6ff96B8A8d214544Ca0dBc9B33f7AD6503eFD32/logo.png", + "symbol": "SYNC", + "name": "SYNC", + "contractAddress": "0xB6ff96B8A8d214544Ca0dBc9B33f7AD6503eFD32", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB987D48Ed8f2C468D52D6405624EADBa5e76d723/logo.png", + "symbol": "STBZ", + "name": "Stabilize Token", + "contractAddress": "0xB987D48Ed8f2C468D52D6405624EADBa5e76d723", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "SNT", + "name": "Status", + "contractAddress": "0x744d70FDBE2Ba4CF95131626614a1763DF805B9E", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "SEED", + "name": "Superbloom Network", + "contractAddress": "0x4e7bd88e3996f48e2a24d15e37ca4c02b4d134d2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1C9922314ED1415c95b9FD453c3818fd41867d0B/logo.png", + "symbol": "TOWER", + "name": "TOWER", + "contractAddress": "0x1C9922314ED1415c95b9FD453c3818fd41867d0B", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xd084B83C305daFD76AE3E1b4E1F1fe2eCcCb3988/logo.png", + "symbol": "TVK", + "name": "Terra Virtua Kolect", + "contractAddress": "0xd084B83C305daFD76AE3E1b4E1F1fe2eCcCb3988", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F/logo.png", + "symbol": "TRAC", + "name": "Trace Token", + "contractAddress": "0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6F87D756DAf0503d08Eb8993686c7Fc01Dc44fB1/logo.png", + "symbol": "TRADE", + "name": "UniTrade", + "contractAddress": "0x6F87D756DAf0503d08Eb8993686c7Fc01Dc44fB1", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B/logo.png", + "symbol": "TRIBE", + "name": "Tribe", + "contractAddress": "0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0000000000085d4780B73119b644AE5ecd22b376/logo.png", + "symbol": "TUSD", + "name": "TrueUSD", + "contractAddress": "0x0000000000085d4780B73119b644AE5ecd22b376", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4C19596f5aAfF459fA38B0f7eD92F11AE6543784/logo.png", + "symbol": "TRU", + "name": "TrustToken", + "contractAddress": "0x4C19596f5aAfF459fA38B0f7eD92F11AE6543784", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e/logo.png", + "symbol": "UBT", + "name": "Unibright", + "contractAddress": "0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "UCASH", + "name": "UCASH", + "contractAddress": "0x92e52a1a235d9a103d970901066ce910aacefd37", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828/logo.png", + "symbol": "UMA", + "name": "UMA Voting Token v1", + "contractAddress": "0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6fC13EACE26590B80cCCAB1ba5d51890577D83B2/logo.png", + "symbol": "UMB", + "name": "Umbrella", + "contractAddress": "0x6fC13EACE26590B80cCCAB1ba5d51890577D83B2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9Ed8e7C9604790F7Ec589F99b94361d8AAB64E5E/logo.png", + "symbol": "UNISTAKE", + "name": "Unistake", + "contractAddress": "0x9Ed8e7C9604790F7Ec589F99b94361d8AAB64E5E", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x10Be9a8dAe441d276a5027936c3aADEd2d82bC15/logo.png", + "symbol": "UMX", + "name": "https://unimex.network/", + "contractAddress": "0x10Be9a8dAe441d276a5027936c3aADEd2d82bC15", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x226f7b842E0F0120b7E194D05432b3fd14773a9D/logo.png", + "symbol": "UNN", + "name": "UNION Protocol Governance Token", + "contractAddress": "0x226f7b842E0F0120b7E194D05432b3fd14773a9D", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "VIB", + "name": "Viberate", + "contractAddress": "0x2C974B2d0BA1716E644c1FC59982a89DDD2fF724", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x3D3D35bb9bEC23b06Ca00fe472b50E7A4c692C30/logo.png", + "symbol": "VIDYA", + "name": "Vidya", + "contractAddress": "0x3D3D35bb9bEC23b06Ca00fe472b50E7A4c692C30", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF938424F7210f31dF2Aee3011291b658f872e91e/logo.png", + "symbol": "VISR", + "name": "VISOR", + "contractAddress": "0xF938424F7210f31dF2Aee3011291b658f872e91e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "WAX", + "name": "WAX", + "contractAddress": "0x39Bb259F66E1C59d5ABEF88375979b4D20D98022", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7a2Bc711E19ba6aff6cE8246C546E8c4B4944DFD/logo.png", + "symbol": "WAXE", + "name": "WAX Economic Token", + "contractAddress": "0x7a2Bc711E19ba6aff6cE8246C546E8c4B4944DFD", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "WINGS", + "name": "Wings", + "contractAddress": "0x667088b212ce3d06a1b553a7221E1fD19000d9aF", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x66a0f676479Cee1d7373f3DC2e2952778BfF5bd6/logo.png", + "symbol": "WISE", + "name": "Wise Token", + "contractAddress": "0x66a0f676479Cee1d7373f3DC2e2952778BfF5bd6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xBF494F02EE3FdE1F20BEE6242bCe2d1ED0c15e47/logo.png", + "symbol": "WORLD", + "name": "World Token", + "contractAddress": "0xBF494F02EE3FdE1F20BEE6242bCe2d1ED0c15e47", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "symbol": "WRC", + "name": "Worldcore", + "contractAddress": "0x72adadb447784dd7ab1f472467750fc485e4cb2d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png", + "symbol": "WBTC", + "name": "Wrapped BTC", + "contractAddress": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png", + "symbol": "WETH", + "name": "Wrapped Ethereum", + "contractAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x09a3EcAFa817268f77BE1283176B946C4ff2E608/logo.png", + "symbol": "MIR", + "name": "Wrapped MIR Token", + "contractAddress": "0x09a3EcAFa817268f77BE1283176B946C4ff2E608", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8888801aF4d980682e47f1A9036e589479e835C5/logo.png", + "symbol": "MPH", + "name": "88mph.app", + "contractAddress": "0x8888801aF4d980682e47f1A9036e589479e835C5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9469D013805bFfB7D3DEBe5E7839237e535ec483/logo.png", + "symbol": "RING", + "name": "Evolution Land Global Token", + "contractAddress": "0x9469D013805bFfB7D3DEBe5E7839237e535ec483", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 0, + "symbol": "XJP", + "name": "Digital JPY", + "contractAddress": "0x39689fE671C01fcE173395f6BC45D4C332026666", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF063fE1aB7a291c5d06a86e14730b00BF24cB589/logo.png", + "symbol": "SALE", + "name": "DxSale.Network", + "contractAddress": "0xF063fE1aB7a291c5d06a86e14730b00BF24cB589", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "XUC", + "name": "Exchange Union", + "contractAddress": "0xc324a2f6b05880503444451b8b27e6f9e63287cb", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xee573a945B01B788B9287CE062A0CFC15bE9fd86/logo.png", + "symbol": "XED", + "name": "Exeedme", + "contractAddress": "0xee573a945B01B788B9287CE062A0CFC15bE9fd86", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2e1E15C44Ffe4Df6a0cb7371CD00d5028e571d14/logo.png", + "symbol": "MTLX", + "name": "Mettalex", + "contractAddress": "0x2e1E15C44Ffe4Df6a0cb7371CD00d5028e571d14", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "NCASH", + "name": "Nucleus Vision", + "contractAddress": "0x809826cceab68c387726af962713b64cb5cb3cca", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA15C7Ebe1f07CaF6bFF097D8a589fb8AC49Ae5B3/logo.png", + "symbol": "NPXS", + "name": "Pundi X Token", + "contractAddress": "0xA15C7Ebe1f07CaF6bFF097D8a589fb8AC49Ae5B3", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4fE83213D56308330EC302a8BD641f1d0113A4Cc/logo.png", + "symbol": "NU", + "name": "NuCypher", + "contractAddress": "0x4fE83213D56308330EC302a8BD641f1d0113A4Cc", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "QRL", + "name": "QRL", + "contractAddress": "0x697beac28B09E122C4332D163985e8a73121b97F", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "PAY", + "name": "TenX", + "contractAddress": "0xB97048628DB6B661D4C2aA833e95Dbe1A905B280", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xe3818504c1B32bF1557b16C238B2E01Fd3149C17/logo.png", + "symbol": "PLR", + "name": "PILLAR", + "contractAddress": "0xe3818504c1B32bF1557b16C238B2E01Fd3149C17", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "PMTN", + "name": "Peer Mountain", + "contractAddress": "0xe91df2bb9bccd18c45f01843cab88768d64f2d32", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5BEfBB272290dD5b8521D4a938f6c4757742c430/logo.png", + "symbol": "XFI", + "name": "Xfinance", + "contractAddress": "0x5BEfBB272290dD5b8521D4a938f6c4757742c430", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0f7F961648aE6Db43C75663aC7E5414Eb79b5704/logo.png", + "symbol": "XIO", + "name": "XIO Network", + "contractAddress": "0x0f7F961648aE6Db43C75663aC7E5414Eb79b5704", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x607F4C5BB672230e8672085532f7e901544a7375/logo.png", + "symbol": "RLC", + "name": "iExec RLC", + "contractAddress": "0x607F4C5BB672230e8672085532f7e901544a7375", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x89Ab32156e46F46D02ade3FEcbe5Fc4243B9AAeD/logo.png", + "symbol": "PNT", + "name": "pNetwork Token", + "contractAddress": "0x89Ab32156e46F46D02ade3FEcbe5Fc4243B9AAeD", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x69A95185ee2a045CDC4bCd1b1Df10710395e4e23/logo.png", + "symbol": "POOLZ", + "name": "$Poolz Finance", + "contractAddress": "0x69A95185ee2a045CDC4bCd1b1Df10710395e4e23", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + }, + "symbol": "QCX", + "name": "QuickX Protocol", + "contractAddress": "0xf9e5af7b42d31d51677c75bbbd37c1986ec79aee", + "customIcon": "qcx" + }, + { + "decimalCount": 18, + "symbol": "QSP", + "name": "Quantstamp", + "contractAddress": "0x99ea4dB9EE77ACD40B119BD1dC4E33e1C070b80d", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919/logo.png", + "symbol": "RAI", + "name": "Rai Reflex Index", + "contractAddress": "0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xFca59Cd816aB1eaD66534D82bc21E7515cE441CF/logo.png", + "symbol": "RARI", + "name": "Rarible", + "contractAddress": "0xFca59Cd816aB1eaD66534D82bc21E7515cE441CF", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x50DE6856358Cc35f3A9a57eAAA34BD4cB707d2cd/logo.png", + "symbol": "RAZOR", + "name": "RAZOR", + "contractAddress": "0x50DE6856358Cc35f3A9a57eAAA34BD4cB707d2cd", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "RCN", + "name": "Ripio Credit", + "contractAddress": "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xFE3E6a25e6b192A42a44ecDDCd13796471735ACf/logo.png", + "symbol": "REEF", + "name": "Reef.finance", + "contractAddress": "0xFE3E6a25e6b192A42a44ecDDCd13796471735ACf", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x408e41876cCCDC0F92210600ef50372656052a38/logo.png", + "symbol": "REN", + "name": "Republic Token", + "contractAddress": "0x408e41876cCCDC0F92210600ef50372656052a38", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1985365e9f78359a9B6AD760e32412f4a445E862/logo.png", + "symbol": "REP", + "name": "Reputation", + "contractAddress": "0x1985365e9f78359a9B6AD760e32412f4a445E862", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x557B933a7C2c45672B610F8954A3deB39a51A8Ca/logo.png", + "symbol": "REVV", + "name": "REVV", + "contractAddress": "0x557B933a7C2c45672B610F8954A3deB39a51A8Ca", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa1d6Df714F91DeBF4e0802A542E13067f31b8262/logo.png", + "symbol": "RFOX", + "name": "RFOX", + "contractAddress": "0xa1d6Df714F91DeBF4e0802A542E13067f31b8262", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "RUFF", + "name": "RUFF", + "contractAddress": "0xf278c1ca969095ffddded020290cf8b5c424ace2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xf21661D0D1d76d3ECb8e1B9F1c923DBfffAe4097/logo.png", + "symbol": "RIO", + "name": "Realio Network", + "contractAddress": "0xf21661D0D1d76d3ECb8e1B9F1c923DBfffAe4097", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "RCC", + "name": "Reality Clash", + "contractAddress": "0x9b6443b0fb9c241a7fdac375595cea13e6b7807a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x221657776846890989a759BA2973e427DfF5C9bB/logo.png", + "symbol": "REPv2", + "name": "Reputation", + "contractAddress": "0x221657776846890989a759BA2973e427DfF5C9bB", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 0, + "symbol": "REV", + "name": "Revain", + "contractAddress": "0x48f775efbe4f5ece6e0df2f7b5932df56823b990", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xaf9f549774ecEDbD0966C52f250aCc548D3F36E5/logo.png", + "symbol": "RFuel", + "name": "Rio Fuel Token", + "contractAddress": "0xaf9f549774ecEDbD0966C52f250aCc548D3F36E5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "RVT", + "name": "Rivetz", + "contractAddress": "0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB4EFd85c19999D84251304bDA99E90B92300Bd93/logo.png", + "symbol": "RPL", + "name": "Rocket Pool", + "contractAddress": "0xB4EFd85c19999D84251304bDA99E90B92300Bd93", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x3845badAde8e6dFF049820680d1F14bD3903a5d0/logo.png", + "symbol": "SAND", + "name": "SAND", + "contractAddress": "0x3845badAde8e6dFF049820680d1F14bD3903a5d0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "SENT", + "name": "SENTinel", + "contractAddress": "0xa44e5137293e855b1b7bc7e2c6f8cd796ffcb037", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD23Ac27148aF6A2f339BD82D0e3CFF380b5093de/logo.png", + "symbol": "SI", + "name": "SIREN", + "contractAddress": "0xD23Ac27148aF6A2f339BD82D0e3CFF380b5093de", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "STK", + "name": "STK", + "contractAddress": "0xae73b38d1c9a8b274127ec30160a4927c4d71824", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "SAI", + "name": "Sai", + "contractAddress": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "SALT", + "name": "SALT", + "contractAddress": "0x4156D3342D5c385a87D264F90653733592000581", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9B02dD390a603Add5c07f9fd9175b7DABE8D63B7/logo.png", + "symbol": "SPI", + "name": "Shopping.io", + "contractAddress": "0x9B02dD390a603Add5c07f9fd9175b7DABE8D63B7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 0, + "symbol": "SNGLS", + "name": "Singular DTV", + "contractAddress": "0xaeC2E87E0A235266D9C5ADc9DEb4b2E29b54D009", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 0, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x37236CD05b34Cc79d3715AF2383E96dd7443dCF1/logo.png", + "symbol": "SLP", + "name": "Small Love Potion", + "contractAddress": "0x37236CD05b34Cc79d3715AF2383E96dd7443dCF1", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x06A01a4d579479Dd5D884EBf61A31727A3d8D442/logo.png", + "symbol": "Skey", + "name": "SmartKey", + "contractAddress": "0x06A01a4d579479Dd5D884EBf61A31727A3d8D442", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0488401c3F535193Fa8Df029d9fFe615A06E74E6/logo.png", + "symbol": "SRK", + "name": "SparkPoint", + "contractAddress": "0x0488401c3F535193Fa8Df029d9fFe615A06E74E6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xb753428af26E81097e7fD17f40c88aaA3E04902c/logo.png", + "symbol": "SFI", + "name": "Spice", + "contractAddress": "0xb753428af26E81097e7fD17f40c88aaA3E04902c", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x00c83aeCC790e8a4453e5dD3B0B4b3680501a7A7/logo.png", + "symbol": "SKL", + "name": "SKALE", + "contractAddress": "0x00c83aeCC790e8a4453e5dD3B0B4b3680501a7A7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x40FD72257597aA14C7231A7B1aaa29Fce868F677/logo.png", + "symbol": "XOR", + "name": "Sora", + "contractAddress": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "STORJ", + "name": "Storj", + "contractAddress": "0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xbE9375C6a420D2eEB258962efB95551A5b722803/logo.png", + "symbol": "STMX", + "name": "StormX", + "contractAddress": "0xbE9375C6a420D2eEB258962efB95551A5b722803", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "STQ", + "name": "Storiqa", + "contractAddress": "0x5c3a228510d246b78a3765c20221cbf3082b44a4", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "STORM", + "name": "Storm", + "contractAddress": "0xD0a4b8946Cb52f0661273bfbC6fD0E0C75Fc6433", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x990f341946A3fdB507aE7e52d17851B87168017c/logo.png", + "symbol": "STRONG", + "name": "Strong", + "contractAddress": "0x990f341946A3fdB507aE7e52d17851B87168017c", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "STX", + "name": "Stox", + "contractAddress": "0x006BeA43Baa3f7A6f765F14f10A1a1b08334EF45", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "SNC", + "name": "SunContract", + "contractAddress": "0xF4134146AF2d511Dd5EA8cDB1C4AC88C57D60404", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xe53EC727dbDEB9E2d5456c3be40cFF031AB40A55/logo.png", + "symbol": "SUPER", + "name": "SuperFarm", + "contractAddress": "0xe53EC727dbDEB9E2d5456c3be40cFF031AB40A55", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B3595068778DD592e39A122f4f5a5cF09C90fE2/logo.png", + "symbol": "SUSHI", + "name": "SushiSwap", + "contractAddress": "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9/logo.png", + "symbol": "SXP", + "name": "Swipe", + "contractAddress": "0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9f7229aF0c4b9740e207Ea283b9094983f78ba04/logo.png", + "symbol": "TAD", + "name": "Tadpole", + "contractAddress": "0x9f7229aF0c4b9740e207Ea283b9094983f78ba04", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa1eD0364D53394209D61aE8bfdb8Ff50484D8c91/logo.png", + "symbol": "TBC", + "name": "TeraBlock Token", + "contractAddress": "0xa1eD0364D53394209D61aE8bfdb8Ff50484D8c91", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "THETA", + "name": "Theta Token", + "contractAddress": "0x3883f5e181fccaf8410fa61e12b59bad963fb645", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x77777FeDdddFfC19Ff86DB637967013e6C6A116C/logo.png", + "symbol": "TORN", + "name": "TornadoCash", + "contractAddress": "0x77777FeDdddFfC19Ff86DB637967013e6C6A116C", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "symbol": "TRX", + "name": "TRON", + "contractAddress": "0xf230b790e05390fc8295f4d3f60332c93bed42e2", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0202Be363B8a4820f3F4DE7FaF5224fF05943AB1/logo.png", + "symbol": "UFT", + "name": "UniLend Finance Token", + "contractAddress": "0x0202Be363B8a4820f3F4DE7FaF5224fF05943AB1", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png", + "symbol": "USDC", + "name": "USDC", + "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "STU", + "name": "bitJob", + "contractAddress": "0x0371a82e4a9d0a4312f3ee2ac9c6958512891372", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xBa21Ef4c9f433Ede00badEFcC2754B8E74bd538A/logo.png", + "symbol": "SWFL", + "name": "Swapfolio", + "contractAddress": "0xBa21Ef4c9f433Ede00badEFcC2754B8E74bd538A", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8dAEBADE922dF735c38C80C7eBD708Af50815fAa/logo.png", + "symbol": "TBTC", + "name": "tBTC", + "contractAddress": "0x8dAEBADE922dF735c38C80C7eBD708Af50815fAa", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x57Ab1ec28D129707052df4dF418D58a2D46d5f51/logo.png", + "symbol": "sUSD", + "name": "Synth sUSD", + "contractAddress": "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 2, + "symbol": "TEL", + "name": "Telcoin", + "contractAddress": "0x467bccd9d29f223bce8043b84e8c8b282827790f", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xDcB01cc464238396E213a6fDd933E36796eAfF9f/logo.png", + "symbol": "YLD", + "name": "Yield", + "contractAddress": "0xDcB01cc464238396E213a6fDd933E36796eAfF9f", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7F3EDcdD180Dbe4819Bd98FeE8929b5cEdB3AdEB/logo.png", + "symbol": "XTK", + "name": "xToken", + "contractAddress": "0x7F3EDcdD180Dbe4819Bd98FeE8929b5cEdB3AdEB", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xAE1eaAE3F627AAca434127644371b67B18444051/logo.png", + "symbol": "YOP", + "name": "YOP", + "contractAddress": "0xAE1eaAE3F627AAca434127644371b67B18444051", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xf4CD3d3Fda8d7Fd6C5a500203e38640A70Bf9577/logo.png", + "symbol": "Yf-DAI", + "name": "YfDAI.finance", + "contractAddress": "0xf4CD3d3Fda8d7Fd6C5a500203e38640A70Bf9577", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2e2f3246b6c65CCc4239c9Ee556EC143a7E5DE2c/logo.png", + "symbol": "YFIM", + "name": "yfi.mobi", + "contractAddress": "0x2e2f3246b6c65CCc4239c9Ee556EC143a7E5DE2c", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB1e9157c2Fdcc5a856C8DA8b2d89b6C32b3c1229/logo.png", + "symbol": "ZEFU", + "name": "Zenfuse Trading Platform Token", + "contractAddress": "0xB1e9157c2Fdcc5a856C8DA8b2d89b6C32b3c1229", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 12, + "symbol": "ZIL", + "name": "Zilliqa", + "contractAddress": "0x05f4a42e251f2d52b8ed15E9FEdAacFcEF1FAD27", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "ZLA", + "name": "Zilla", + "contractAddress": "0xfd8971d5e8e1740ce2d0a84095fca4de729d0c16", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xE95A203B1a91a908F9B9CE46459d101078c2c3cb/logo.png", + "symbol": "aEth", + "name": "aEthereum", + "contractAddress": "0xE95A203B1a91a908F9B9CE46459d101078c2c3cb", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7b123f53421b1bF8533339BFBdc7C98aA94163db/logo.png", + "symbol": "buidl", + "name": "dfohub", + "contractAddress": "0x7b123f53421b1bF8533339BFBdc7C98aA94163db", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5218E472cFCFE0b64A064F055B43b4cdC9EfD3A6/logo.png", + "symbol": "eRSDL", + "name": "UnFederalReserveToken", + "contractAddress": "0x5218E472cFCFE0b64A064F055B43b4cdC9EfD3A6", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984/logo.png", + "symbol": "UNI", + "name": "Uniswap", + "contractAddress": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 6, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png", + "symbol": "USDT", + "name": "Tether USD", + "contractAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "VEE", + "name": "BLOCKv", + "contractAddress": "0x340d2bde5eb28c1eed91b2f790723e3b160613b7", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF411903cbC70a74d22900a5DE66A2dda66507255/logo.png", + "symbol": "VRA", + "name": "VERA", + "contractAddress": "0xF411903cbC70a74d22900a5DE66A2dda66507255", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421/logo.png", + "symbol": "VSP", + "name": "VesperToken", + "contractAddress": "0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "symbol": "VGX", + "name": "Voyager", + "contractAddress": "0x5af2be193a6abca9c8817001f45744777db30756", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 4, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9355372396e3F6daF13359B7b607a3374cc638e0/logo.png", + "symbol": "WHALE", + "name": "WHALE", + "contractAddress": "0x9355372396e3F6daF13359B7b607a3374cc638e0", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "WTC", + "name": "Waltonchain", + "contractAddress": "0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4691937a7508860F876c9c0a2a617E7d9E945D4B/logo.png", + "symbol": "WOO", + "name": "Wootrade Network", + "contractAddress": "0x4691937a7508860F876c9c0a2a617E7d9E945D4B", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "symbol": "WPR", + "name": "WePower", + "contractAddress": "0x4CF488387F035FF08c371515562CBa712f9015d4", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5228a22e72ccC52d415EcFd199F99D0665E7733b/logo.png", + "symbol": "pBTC", + "name": "pTokens BTC", + "contractAddress": "0x5228a22e72ccC52d415EcFd199F99D0665E7733b", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 8, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D/logo.png", + "symbol": "renBTC", + "name": "renBTC", + "contractAddress": "0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x3383c5a8969Dc413bfdDc9656Eb80A1408E4bA20/logo.png", + "symbol": "wANATHA", + "name": "Wrapped ANATHA", + "contractAddress": "0x3383c5a8969Dc413bfdDc9656Eb80A1408E4bA20", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa0afAA285Ce85974c3C881256cB7F225e3A1178a/logo.png", + "symbol": "wCRES", + "name": "Wrapped CRES", + "contractAddress": "0xa0afAA285Ce85974c3C881256cB7F225e3A1178a", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e/logo.png", + "symbol": "YFI", + "name": "Yearn.Finance", + "contractAddress": "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF94b5C5651c888d928439aB6514B93944eEE6F48/logo.png", + "symbol": "YLD", + "name": "Yield", + "contractAddress": "0xF94b5C5651c888d928439aB6514B93944eEE6F48", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 10, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xb9EF770B6A5e12E45983C5D80545258aA38F3B78/logo.png", + "symbol": "ZCN", + "name": "0chain", + "contractAddress": "0xb9EF770B6A5e12E45983C5D80545258aA38F3B78", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2eDf094dB69d6Dcd487f1B3dB9febE2eeC0dd4c5/logo.png", + "symbol": "ZEE", + "name": "ZeroSwapToken", + "contractAddress": "0x2eDf094dB69d6Dcd487f1B3dB9febE2eeC0dd4c5", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xE41d2489571d322189246DaFA5ebDe1F4699F498/logo.png", + "symbol": "ZRX", + "name": "0x Protocol Token", + "contractAddress": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 18, + "customIconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1337DEF18C680aF1f9f45cBcab6309562975b1dD/logo.png", + "symbol": "arNXM", + "name": "Armor NXM", + "contractAddress": "0x1337DEF18C680aF1f9f45cBcab6309562975b1dD", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + }, + { + "decimalCount": 9, + "symbol": "ADT", + "name": "adToken", + "contractAddress": "0xD0D6D6C5Fe4a677D343cC433536BB717bAe167dD", + "blockchain": { + "key": "ethereum", + "curve": "secp256k1", + "testnet": false + } + } ] diff --git a/app/src/main/res/layout/item_popular_token.xml b/app/src/main/res/layout/item_popular_token.xml index 8d22ab57b4..9e988b2d7a 100644 --- a/app/src/main/res/layout/item_popular_token.xml +++ b/app/src/main/res/layout/item_popular_token.xml @@ -33,7 +33,7 @@ + + + \ No newline at end of file From 10bab3797333a77b5fc5edb96531e8e2c1043636 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 25 Jun 2021 14:33:24 +0300 Subject: [PATCH 3/8] Updated on 2026-08-14 --- .../main/assets/ethereum_tokens_testnet.json | 26 +++++++++++ .../tangem/tap/common/extensions/Picasso.kt | 15 ++++++- .../com/tangem/tap/domain/TapWalletManager.kt | 2 + .../com/tangem/tap/domain/TapWorkarounds.kt | 5 +++ .../warningMessage/WarningMessage.kt | 5 ++- .../warningMessage/WarningMessagesManager.kt | 12 +++++ .../tap/domain/extensions/Blockchain.kt | 14 ------ .../domain/extensions/WalletManagerFactory.kt | 33 ++++++++++---- .../tap/domain/tokens/CurrenciesRepository.kt | 27 +++-------- .../tap/domain/{ => topup}/TopUpHelper.kt | 19 ++++++-- .../tangem/tap/domain/topup/TopUpManager.kt | 45 +++++++++++++++++++ .../walletconnect/WalletConnectMiddleware.kt | 3 +- .../features/tokens/redux/TokensMiddleware.kt | 11 +++-- .../tap/features/wallet/redux/WalletAction.kt | 3 +- .../tap/features/wallet/redux/WalletState.kt | 7 ++- .../middlewares/MultiWalletMiddleware.kt | 23 ++++++---- .../redux/middlewares/TopUpMiddleware.kt | 31 ++++++++++--- .../redux/middlewares/WalletMiddleware.kt | 1 - .../redux/middlewares/WarningsMiddleware.kt | 6 +++ .../wallet/redux/reducers/WalletReducer.kt | 1 + .../wallet/ui/adapters/WalletAdapter.kt | 2 +- .../ui/adapters/WarningMessagesAdapter.kt | 2 +- app/src/main/res/values/colors.xml | 2 + .../main/res/values/strings_untranslated.xml | 3 ++ 24 files changed, 224 insertions(+), 74 deletions(-) create mode 100644 app/src/main/assets/ethereum_tokens_testnet.json rename app/src/main/java/com/tangem/tap/domain/{ => topup}/TopUpHelper.kt (75%) create mode 100644 app/src/main/java/com/tangem/tap/domain/topup/TopUpManager.kt diff --git a/app/src/main/assets/ethereum_tokens_testnet.json b/app/src/main/assets/ethereum_tokens_testnet.json new file mode 100644 index 0000000000..5222bbe37d --- /dev/null +++ b/app/src/main/assets/ethereum_tokens_testnet.json @@ -0,0 +1,26 @@ +[ + { + "decimalCount" : 18, + "symbol" : "WEENUS", + "name" : "Weenus", + "contractAddress" : "0xaFF4481D10270F50f203E0763e2597776068CBc5" + }, + { + "decimalCount" : 18, + "symbol" : "XEENUS", + "name" : "Xeenus", + "contractAddress" : "0x022E292b44B5a146F2e8ee36Ff44D3dd863C915c" + }, + { + "decimalCount" : 8, + "symbol" : "YEENUS", + "name" : "Yeenus", + "contractAddress" : "0xc6fDe3FD2Cc2b173aEC24cc3f267cb3Cd78a26B7" + }, + { + "decimalCount" : 0, + "symbol" : "ZEENUS", + "name" : "Zeenus", + "contractAddress" : "0x1f9061B953bBa0E36BF50F21876132DcF276fC6e" + } +] diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt b/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt index e12711e3d0..d470ae2bf6 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Picasso.kt @@ -1,7 +1,9 @@ package com.tangem.tap.common.extensions +import android.graphics.PorterDuff import android.widget.ImageView import android.widget.TextView +import androidx.core.content.ContextCompat import com.squareup.picasso.Callback import com.squareup.picasso.Picasso import com.tangem.blockchain.common.Blockchain @@ -48,6 +50,7 @@ fun Picasso.loadCurrenciesIcon( imageView.colorFilter = null textView.text = null } + if (blockchain.isTestnet()) imageView.tint(R.color.tint) } }) } @@ -70,12 +73,20 @@ private fun setOfflineCurrencyImage( } else { setBlockchainImage(imageView, textView, blockchain) } + if (blockchain.isTestnet()) imageView.tint(R.color.tint) +} + +fun ImageView.tint(colorRes: Int) { +// val color = ContextCompat.getColor(context, colorRes); +// ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(color)); + this.setColorFilter(ContextCompat.getColor(context, colorRes), PorterDuff.Mode.DARKEN); + } private fun setBlockchainImage( imageView: ImageView, textView: TextView, - blockchain: Blockchain + blockchain: Blockchain, ) { imageView.setImageResource(blockchain.getIconRes()) imageView.colorFilter = null @@ -85,7 +96,7 @@ private fun setBlockchainImage( private fun setTokenImage( imageView: ImageView, textView: TextView, - token: Token + token: Token, ) { imageView.setImageResource(R.drawable.shape_circle) imageView.setColorFilter(token.getColor()) diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index acdc924fd4..d0f72cd47b 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -10,6 +10,7 @@ import com.tangem.tap.common.redux.global.FiatCurrencyName import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.currenciesRepository import com.tangem.tap.domain.TapWorkarounds.isStart2Coin +import com.tangem.tap.domain.TapWorkarounds.isTestCard import com.tangem.tap.domain.configurable.config.ConfigManager import com.tangem.tap.domain.extensions.* import com.tangem.tap.domain.tasks.ScanNoteResponse @@ -96,6 +97,7 @@ class TapWalletManager { withContext(Dispatchers.Main) { store.dispatch(WalletAction.ResetState) store.dispatch(GlobalAction.SaveScanNoteResponse(data)) + store.dispatch(WalletAction.SetIfTestnetCard(data.card.isTestCard)) store.dispatch(WalletAction.MultiWallet.SetIsMultiwalletAllowed(data.card.isMultiwalletAllowed)) if (data.card.isTwinCard()) { val secondCardId = TwinsHelper.getTwinsCardId(data.card.cardId) diff --git a/app/src/main/java/com/tangem/tap/domain/TapWorkarounds.kt b/app/src/main/java/com/tangem/tap/domain/TapWorkarounds.kt index 5807bd024e..0c1a379a3c 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWorkarounds.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWorkarounds.kt @@ -27,7 +27,12 @@ object TapWorkarounds { } + val Card.isTestCard: Boolean + get() = cardData?.batchId == TEST_CARD_BATCH && cardId.startsWith(TEST_CARD_ID_STARTS_WITH) + private const val START_2_COIN_ISSUER = "start2coin" + private const val TEST_CARD_BATCH = "99FF" + private const val TEST_CARD_ID_STARTS_WITH = "FF99" private val excludedBatches = listOf( "0027", diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessage.kt b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessage.kt index 3c3ad5f5ce..500f3844b3 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessage.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessage.kt @@ -1,6 +1,5 @@ package com.tangem.tap.domain.configurable.warningMessage -import android.view.View import androidx.annotation.StringRes import com.squareup.moshi.Json import com.tangem.blockchain.common.Blockchain @@ -46,7 +45,9 @@ data class WarningMessage( @Json(name = "temporary") Temporary, // можно скрыть (кнопка ОК) - AppRating + AppRating, + + TestCard } diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt index 1c59ee5c55..0e48e115e1 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt @@ -156,6 +156,18 @@ class WarningMessagesManager( messageFormatArg = remainingSignatures.toString() ) + fun testCardWarning(): WarningMessage = WarningMessage( + "", + "", + type = WarningMessage.Type.TestCard, + priority = WarningMessage.Priority.Critical, + listOf(WarningMessage.Location.MainScreen), + null, + R.string.alert_title, + R.string.warning_testnet_card_message, + WarningMessage.Origin.Local + ) + const val REMAINING_SIGNATURES_WARNING = 10 } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/extensions/Blockchain.kt b/app/src/main/java/com/tangem/tap/domain/extensions/Blockchain.kt index a89f4fe24c..13946dd481 100644 --- a/app/src/main/java/com/tangem/tap/domain/extensions/Blockchain.kt +++ b/app/src/main/java/com/tangem/tap/domain/extensions/Blockchain.kt @@ -2,7 +2,6 @@ package com.tangem.tap.domain.extensions import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Token -import com.tangem.commands.common.card.EllipticCurve import java.math.BigDecimal @@ -26,17 +25,4 @@ fun Blockchain.minimalAmount(): BigDecimal { return 1.toBigDecimal().movePointLeft(decimals()) } -fun Blockchain.getSupportedCurves(): List? { - return when (this) { - Blockchain.Unknown -> null - Blockchain.Bitcoin, Blockchain.BitcoinTestnet, Blockchain.BitcoinCash, Blockchain.Litecoin, - Blockchain.Ducatus, Blockchain.Ethereum, Blockchain.EthereumTestnet, Blockchain.RSK, - Blockchain.Binance, Blockchain.BinanceTestnet -> listOf(EllipticCurve.Secp256k1) - Blockchain.Tezos, Blockchain.XRP -> listOf(EllipticCurve.Secp256k1, EllipticCurve.Ed25519) - Blockchain.Cardano, Blockchain.CardanoShelley, Blockchain.Stellar -> - listOf(EllipticCurve.Ed25519) - else -> listOf(EllipticCurve.Secp256k1) - } -} - private const val NODL = "NODL" \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt b/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt index 68a0ee5b84..88583ddf84 100644 --- a/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt +++ b/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt @@ -7,6 +7,7 @@ import com.tangem.commands.common.card.Card import com.tangem.commands.common.card.EllipticCurve import com.tangem.commands.wallet.CardWallet import com.tangem.common.extensions.hexToBytes +import com.tangem.tap.domain.TapWorkarounds.isTestCard import com.tangem.tap.domain.tasks.ScanNoteResponse import com.tangem.tap.domain.twins.isTwinCard @@ -19,28 +20,44 @@ fun WalletManagerFactory.makeWalletManagerForApp( val wallet = selectWallet(wallets) val publicKey = wallet?.publicKey ?: return null val curveToUse = wallet.curve ?: return null - return makeWalletManager(card.cardId, publicKey, blockchain, curveToUse) + return if (card.isTestCard) { + blockchain.getTestnetVersion()?.let { + makeWalletManager(card.cardId, publicKey, it, curveToUse) + } + } else { + makeWalletManager(card.cardId, publicKey, blockchain, curveToUse) + } } private fun selectWallet(wallets: List): CardWallet? { - return when (wallets.size) { - 0 -> null - 1 -> wallets[0] - else -> wallets.firstOrNull { it.curve == EllipticCurve.Secp256k1 } ?: wallets[0] - } + return when (wallets.size) { + 0 -> null + 1 -> wallets[0] + else -> wallets.firstOrNull { it.curve == EllipticCurve.Secp256k1 } ?: wallets[0] + } } fun WalletManagerFactory.makeWalletManagersForApp( card: Card, blockchains: List, ): List { - return blockchains.mapNotNull { blockchain -> makeWalletManagerForApp(card, blockchain) } + return if (card.isTestCard) { + blockchains.mapNotNull { blockchain -> + blockchain.getTestnetVersion()?.let { makeWalletManagerForApp(card, it) } + } + } else { + blockchains.mapNotNull { blockchain -> makeWalletManagerForApp(card, blockchain) } + } } fun WalletManagerFactory.makePrimaryWalletManager( data: ScanNoteResponse, ): WalletManager? { val card = data.card - val blockchain = card.getBlockchain() + val blockchain = if (card.isTestCard) { + card.getBlockchain()?.getTestnetVersion() + } else { + card.getBlockchain() + } val supportedCurves = blockchain?.getSupportedCurves() ?: return null val wallets = card.wallets.filter { wallet -> supportedCurves.contains(wallet.curve) } val wallet = selectWallet(wallets) diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/CurrenciesRepository.kt b/app/src/main/java/com/tangem/tap/domain/tokens/CurrenciesRepository.kt index 754d7ea239..af149d9af5 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/CurrenciesRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/CurrenciesRepository.kt @@ -93,42 +93,29 @@ class CurrenciesRepository(val context: Application) { } } - fun getPopularTokens(): List { - val json = context.assets.readJsonFileToString(POPULAR_TOKENS_FILE_NAME) + fun getPopularTokens(isTestNet: Boolean = false): List { + val fileName = if (isTestNet) TESTNET_TOKENS_FILE_NAME else POPULAR_TOKENS_FILE_NAME + val json = context.assets.readJsonFileToString(fileName) return tokensAdapter.fromJson(json)!!.map { it.toToken() } } - fun getBlockchains(cardFirmware: FirmwareVersion?): List { + fun getBlockchains(cardFirmware: FirmwareVersion?, isTestNet: Boolean = false): List { return if (cardFirmware == null || cardFirmware.major < 4) { - secp256k1Blockchains + Blockchain.secp256k1Blockchains(isTestNet) } else { - secp256k1Blockchains + ed25519Blockchains + Blockchain.secp256k1Blockchains(isTestNet) + Blockchain.ed25519OnlyBlockchains(isTestNet) } } companion object { private const val POPULAR_TOKENS_FILE_NAME = "erc20_tokens" + private const val TESTNET_TOKENS_FILE_NAME = "ethereum_tokens_testnet" private const val FILE_NAME_PREFIX_TOKENS = "tokens" private const val FILE_NAME_PREFIX_BLOCKCHAINS = "blockchains" fun getFileNameForTokens(cardId: String): String = "${FILE_NAME_PREFIX_TOKENS}_$cardId" fun getFileNameForBlockchains(cardId: String): String = "${FILE_NAME_PREFIX_BLOCKCHAINS}_$cardId" - - private val secp256k1Blockchains = listOf( - Blockchain.Bitcoin, - Blockchain.BitcoinCash, - Blockchain.Binance, - Blockchain.BSC, - Blockchain.Litecoin, - Blockchain.XRP, - Blockchain.Tezos, - Blockchain.Ethereum, - Blockchain.RSK, - Blockchain.Polygon, - Blockchain.Dogecoin, - ) - private val ed25519Blockchains = listOf(Blockchain.CardanoShelley, Blockchain.Stellar) } } diff --git a/app/src/main/java/com/tangem/tap/domain/TopUpHelper.kt b/app/src/main/java/com/tangem/tap/domain/topup/TopUpHelper.kt similarity index 75% rename from app/src/main/java/com/tangem/tap/domain/TopUpHelper.kt rename to app/src/main/java/com/tangem/tap/domain/topup/TopUpHelper.kt index dfa301ab78..2ab6b843c8 100644 --- a/app/src/main/java/com/tangem/tap/domain/TopUpHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/topup/TopUpHelper.kt @@ -1,7 +1,8 @@ -package com.tangem.tap.domain +package com.tangem.tap.domain.topup import android.net.Uri import android.util.Base64 +import com.tangem.blockchain.common.Blockchain import com.tangem.tap.common.redux.global.CryptoCurrencyName import javax.crypto.Mac import javax.crypto.spec.SecretKeySpec @@ -15,10 +16,20 @@ class TopUpHelper { private const val API_KEY_PATH = "?apiKey=" private const val CURRENCY_PATH = "¤cyCode=" private const val WALLET_ADDRESS_PATH = "&walletAddress=" -// private const val REDIRECT_URL_PATH = "&redirectUrl=" + + // private const val REDIRECT_URL_PATH = "&redirectUrl=" private const val SIGNATURE_PATH = "&signature=" - fun getUrl(cryptoCurrencyName: CryptoCurrencyName, walletAddress: String, apiKey: String, secretKey: String): String { + fun getUrl( + blockchain: Blockchain?, + cryptoCurrencyName: CryptoCurrencyName, + walletAddress: String, + apiKey: String, + secretKey: String, + ): String { + if (blockchain?.isTestnet() == true) { + return blockchain.getTestnetTopUpUrl() ?: "" + } val originalQuery = API_KEY_PATH + apiKey.urlEncode() + CURRENCY_PATH + cryptoCurrencyName.urlEncode() + WALLET_ADDRESS_PATH + walletAddress.urlEncode() @@ -41,4 +52,4 @@ class TopUpHelper { return Base64.encodeToString(sha256encoded, Base64.NO_WRAP) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/tangem/tap/domain/topup/TopUpManager.kt b/app/src/main/java/com/tangem/tap/domain/topup/TopUpManager.kt new file mode 100644 index 0000000000..568c65f7d0 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/domain/topup/TopUpManager.kt @@ -0,0 +1,45 @@ +package com.tangem.tap.domain.topup + +import com.tangem.Message +import com.tangem.blockchain.blockchains.ethereum.EthereumWalletManager +import com.tangem.blockchain.common.Amount +import com.tangem.blockchain.common.AmountType +import com.tangem.blockchain.common.Token +import com.tangem.blockchain.extensions.Result +import com.tangem.tap.common.redux.global.GlobalAction +import com.tangem.tap.domain.TangemSigner +import com.tangem.tap.store +import com.tangem.tap.tangemSdk +import java.math.BigDecimal + +class TopUpManager { + suspend fun topUpTestErc20Tokens(walletManager: EthereumWalletManager, token: Token) { + walletManager.update() + + val amountToSend = Amount(walletManager.wallet.blockchain) + val destinationAddress = token.contractAddress + + val feeResult = walletManager.getFee(amountToSend, + destinationAddress) as? Result.Success ?: return + val fee = feeResult.data[0] + + if ((walletManager.wallet.amounts[AmountType.Coin]?.value ?: BigDecimal.ZERO) < fee.value) { + return + } + + val transaction = walletManager.createTransaction(amountToSend, fee, destinationAddress) + + val signer = TangemSigner( + tangemSdk = tangemSdk, Message() + ) { signResponse -> + store.dispatch( + GlobalAction.UpdateWalletSignedHashes( + walletSignedHashes = signResponse.walletSignedHashes, + remainingSignatures = signResponse.walletRemainingSignatures, + walletPublicKey = walletManager.wallet.publicKey + ) + ) + } + walletManager.send(transaction, signer) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt index 89bec71f1f..a4b1faa96b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt @@ -12,6 +12,7 @@ import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction +import com.tangem.tap.domain.TapWorkarounds.isTestCard import com.tangem.tap.domain.extensions.makeWalletManagerForApp import com.tangem.tap.domain.isMultiwalletAllowed import com.tangem.tap.domain.walletconnect.WalletConnectManager @@ -153,7 +154,7 @@ class WalletConnectMiddleware { wcUri = wcUri, wallet = WalletForSession( card.cardId, key.toHexString(), - isTestNet = false + isTestNet = card.isTestCard ), )) } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt index cb13d64dd0..f1bcb72e51 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.tokens.redux import com.tangem.tap.common.redux.AppState import com.tangem.tap.currenciesRepository +import com.tangem.tap.domain.TapWorkarounds.isTestCard import com.tangem.tap.features.tokens.ui.adapters.CurrencyListItem import com.tangem.tap.store import org.rekotlin.Middleware @@ -13,9 +14,13 @@ class TokensMiddleware { { action -> when (action) { is TokensAction.LoadCurrencies -> { - val cardFirmware = state()?.globalState?.scanNoteResponse?.card?.firmwareVersion - val tokens = currenciesRepository.getPopularTokens() - val blockchains = currenciesRepository.getBlockchains(cardFirmware) + val card = state()?.globalState?.scanNoteResponse?.card + val isTestcard = card?.isTestCard ?: false + val tokens = currenciesRepository.getPopularTokens(isTestcard) + val blockchains = currenciesRepository.getBlockchains( + cardFirmware = card?.firmwareVersion, + isTestNet = isTestcard + ) val currencies = CurrencyListItem.createListOfCurrencies( blockchains, tokens ) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index ebfadb5df3..43617cb446 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -6,7 +6,6 @@ import com.tangem.blockchain.common.address.AddressType import com.tangem.commands.common.card.Card import com.tangem.tap.common.redux.ErrorAction import com.tangem.tap.common.redux.NotificationAction -import com.tangem.tap.common.redux.global.CryptoCurrencyName import com.tangem.tap.domain.TapError import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.tokens.CardCurrencies @@ -19,6 +18,8 @@ sealed class WalletAction : Action { object ResetState : WalletAction() + data class SetIfTestnetCard(val isTestnet: Boolean) : WalletAction() + object LoadData : WalletAction() { data class Failure(val error: TapError) : WalletAction() } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index 35b301fd50..808201e795 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -32,7 +32,8 @@ data class WalletState( val cardCurrency: CryptoCurrencyName? = null, val selectedWallet: Currency? = null, val primaryBlockchain: Blockchain? = null, - val primaryToken: Token? = null + val primaryToken: Token? = null, + val isTestnet: Boolean = false, ) : StateType { val primaryWallet = if (wallets.isNotEmpty()) wallets[0] else null @@ -49,7 +50,9 @@ data class WalletState( fun getWalletManager(token: Token?): WalletManager? { if (token == null) return null - val ethereumWalletManager = walletManagers.find { it.wallet.blockchain == Blockchain.Ethereum } + val ethereumWalletManager = walletManagers + .find { it.wallet.blockchain == Blockchain.Ethereum || + it.wallet.blockchain == Blockchain.EthereumTestnet } return if (ethereumWalletManager?.presetTokens?.contains(token) == true) { ethereumWalletManager } else { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index 905ecce398..853b1fb45b 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -8,6 +8,7 @@ import com.tangem.tap.common.redux.global.GlobalState import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.currenciesRepository +import com.tangem.tap.domain.TapWorkarounds.isTestCard import com.tangem.tap.domain.extensions.makeWalletManagerForApp import com.tangem.tap.domain.extensions.makeWalletManagersForApp import com.tangem.tap.features.wallet.redux.Currency @@ -22,7 +23,7 @@ import kotlinx.coroutines.withContext class MultiWalletMiddleware { fun handle( - action: WalletAction.MultiWallet, walletState: WalletState?, globalState: GlobalState?, + action: WalletAction.MultiWallet, walletState: WalletState?, globalState: GlobalState?, ) { when (action) { is WalletAction.MultiWallet.AddWalletManagers -> { @@ -64,7 +65,10 @@ class MultiWalletMiddleware { val cardId = globalState?.scanNoteResponse?.card?.cardId when (val currency = action.walletData.currency) { is Currency.Blockchain -> { - cardId?.let { currenciesRepository.removeBlockchain(it, currency.blockchain) } + cardId?.let { + currenciesRepository.removeBlockchain(it, + currency.blockchain) + } } is Currency.Token -> { walletState?.getWalletManager(currency.token) @@ -76,8 +80,9 @@ class MultiWalletMiddleware { is WalletAction.MultiWallet.FindBlockchainsInUse -> { val cardFirmware = globalState?.scanNoteResponse?.card?.firmwareVersion val blockchains = currenciesRepository.getBlockchains(cardFirmware) - .filterNot { walletState?.blockchains?.contains(it) == true } - val walletManagers = action.factory.makeWalletManagersForApp(action.card, blockchains) + .filterNot { walletState?.blockchains?.contains(it) == true } + val walletManagers = + action.factory.makeWalletManagersForApp(action.card, blockchains) scope.launch { walletManagers.map { walletManager -> @@ -107,10 +112,10 @@ class MultiWalletMiddleware { is WalletAction.MultiWallet.FindTokensInUse -> { val card = globalState?.scanNoteResponse?.card ?: return val walletManager = walletState?.getWalletManager(Blockchain.Ethereum) - ?: globalState.tapWalletManager.walletManagerFactory.makeWalletManagerForApp( - card = card, - blockchain = Blockchain.Ethereum - ) + ?: globalState.tapWalletManager.walletManagerFactory.makeWalletManagerForApp( + card = card, + blockchain = Blockchain.Ethereum + ) val tokenFinder = walletManager as TokenFinder scope.launch { val result = tokenFinder.findTokens() @@ -184,7 +189,7 @@ class MultiWalletMiddleware { val walletManager = walletState?.getWalletManager(token) ?: globalState.tapWalletManager.walletManagerFactory.makeWalletManagerForApp( card = card, - blockchain = Blockchain.Ethereum + blockchain = if (card.isTestCard) Blockchain.EthereumTestnet else Blockchain.Ethereum )?.also { walletManager -> store.dispatch(WalletAction.MultiWallet.AddWalletManagers(walletManager)) store.dispatch(WalletAction.MultiWallet.AddBlockchain(walletManager.wallet.blockchain)) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TopUpMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TopUpMiddleware.kt index e0706570f7..98b63904ba 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TopUpMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TopUpMiddleware.kt @@ -2,9 +2,15 @@ package com.tangem.tap.features.wallet.redux.middlewares import android.net.Uri import androidx.browser.customtabs.CustomTabsIntent -import com.tangem.tap.domain.TopUpHelper +import com.tangem.blockchain.blockchains.ethereum.EthereumWalletManager +import com.tangem.tap.domain.topup.TopUpHelper +import com.tangem.tap.domain.topup.TopUpManager +import com.tangem.tap.features.wallet.redux.Currency import com.tangem.tap.features.wallet.redux.WalletAction +import com.tangem.tap.scope import com.tangem.tap.store +import kotlinx.coroutines.launch + class TopUpMiddleware { fun handle(action: WalletAction.TopUpAction) { @@ -16,16 +22,31 @@ class TopUpMiddleware { if (addresses.list.isEmpty()) return val defaultAddress = addresses.list[0].address - val url = TopUpHelper.getUrl( + val currency = selectedWalletData.currency + + if (currency is Currency.Token && currency.blockchain.isTestnet()) { + val walletManager = store.state.walletState.getWalletManager(currency.token) + if (walletManager !is EthereumWalletManager) return + + scope.launch { + TopUpManager().topUpTestErc20Tokens( + walletManager = walletManager, token = currency.token + ) + } + } else { + val url = TopUpHelper.getUrl( + currency?.blockchain, selectedWalletData.currencyData.currencySymbol!!, defaultAddress, config.moonPayApiKey, config.moonPayApiSecretKey - ) - val customTabsIntent = CustomTabsIntent.Builder() + ) + + val customTabsIntent = CustomTabsIntent.Builder() .setToolbarColor(action.toolbarColor) .build() - customTabsIntent.launchUrl(action.context, Uri.parse(url)); + customTabsIntent.launchUrl(action.context, Uri.parse(url)) + } } } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt index 183d55ddda..81feb660aa 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt @@ -43,7 +43,6 @@ class WalletMiddleware { is WalletAction.Warnings -> warningsMiddleware.handle(action, globalState) is WalletAction.MultiWallet -> multiWalletMiddleware.handle(action, walletState, globalState) - is WalletAction.LoadWallet -> { scope.launch { if (action.blockchain == null) { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt index 0ff512dc45..32694c8282 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt @@ -12,6 +12,7 @@ import com.tangem.tap.common.analytics.AnalyticsEvent import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.extensions.isGreaterThan import com.tangem.tap.common.redux.global.GlobalState +import com.tangem.tap.domain.TapWorkarounds.isTestCard import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.domain.extensions.getSingleWallet @@ -84,6 +85,11 @@ class WarningsMiddleware { private fun showCardWarningsIfNeeded(globalState: GlobalState?) { globalState?.scanNoteResponse?.card?.let { card -> globalState.warningManager?.removeWarnings(WarningMessage.Origin.Local) + if (card.isTestCard) { + addWarningMessage(WarningMessagesManager.testCardWarning(), autoUpdate = true) + return@let + } + showWarningLowRemainingSignaturesIfNeeded(card) if (card.getType() != CardType.Release) { addWarningMessage(WarningMessagesManager.devCardWarning()) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt index 5daef27db2..ddb3276dea 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt @@ -39,6 +39,7 @@ private fun internalReduce(action: Action, state: AppState): WalletState { is WalletAction.MultiWallet -> newState = multiWalletReducer.reduce(action, newState) is WalletAction.ResetState -> newState = WalletState() + is WalletAction.SetIfTestnetCard -> newState = newState.copy(isTestnet = action.isTestnet) is WalletAction.EmptyWallet -> { val creatingWalletAllowed = !(newState.twinCardsState != null && newState.twinCardsState?.isCreatingTwinCardsAllowed != true) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt index 62e9849d04..b90adc2cb6 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt @@ -98,7 +98,7 @@ class WalletAdapter Picasso.get().loadCurrenciesIcon( imageView = view.iv_currency, textView = view.tv_token_letter, - token = token, blockchain = blockchain + token = token, blockchain = blockchain, ) when (wallet.currencyData.status) { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt index c262bbb35c..2b793466c3 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt @@ -73,7 +73,7 @@ class WarningMessageVH(val view: View) : RecyclerView.ViewHolder(view) { } private fun setupControlButtons(warning: WarningMessage) = when (warning.type) { - WarningMessage.Type.Permanent -> { + WarningMessage.Type.Permanent, WarningMessage.Type.TestCard -> { view.group_controls_temporary.hide() view.group_controls_rating.hide() } diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index fc5a1fd7b2..de5579c26b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -43,6 +43,8 @@ #CBE4FF #E0E6FA + #55000000 + #1C1C1E #FFB71B #CA0F03 diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index d6c4426536..f3a5887ec0 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -156,4 +156,7 @@ this wallet. This card can’t be used to establish WalletConnect session The operation couldn\'t be completed The operation couldn\'t be completed. \n\nYou have already established a WalletConnect session with this parameters. + + This is a Testnet card. Don\'t accept it as a payment. This card must only be used for testing and development purposes. + From 21e8d45e178dfbaa44086c8196a46c3567087035 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 25 Jun 2021 14:34:57 +0300 Subject: [PATCH 4/8] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/common/extensions/Specific.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt b/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt index a792b8b25e..ab289dc6b6 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Specific.kt @@ -37,7 +37,7 @@ fun BigDecimal.toFiatString(rateValue: BigDecimal, fiatCurrencyName: FiatCurrenc fun BigDecimal.toFiatValue(rateValue: BigDecimal): BigDecimal { val fiatValue = rateValue.multiply(this) - return fiatValue.setScale(2, RoundingMode.DOWN) + return fiatValue.setScale(2, RoundingMode.HALF_UP) } fun BigDecimal.toFormattedFiatValue(fiatCurrencyName: FiatCurrencyName): String { From 6b4c5381fc7d6bdb4e0c2693261789afd314c6ff Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 25 Jun 2021 14:46:32 +0300 Subject: [PATCH 5/8] Updated on 2026-08-14 --- .../wallet/ui/WalletDetailsFragment.kt | 8 ++++++ .../res/layout/fragment_wallet_details.xml | 25 +++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt index 16f8f2b17b..63a7a78812 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt @@ -99,6 +99,14 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), StoreS val selectedWallet = state.getSelectedWalletData() ?: return tv_currency_title.text = selectedWallet.currencyData.currency + val currency = selectedWallet.currency + if (currency is Currency.Token) { + tv_currency_subtitle.text = currency.blockchain.tokenDisplayName() + tv_currency_subtitle.show() + } else { + tv_currency_subtitle.hide() + } + showPendingTransactionsIfPresent(selectedWallet.pendingTransactions) setupAddressCard(selectedWallet) diff --git a/app/src/main/res/layout/fragment_wallet_details.xml b/app/src/main/res/layout/fragment_wallet_details.xml index 757eeab445..8270cd53ac 100644 --- a/app/src/main/res/layout/fragment_wallet_details.xml +++ b/app/src/main/res/layout/fragment_wallet_details.xml @@ -52,7 +52,6 @@ android:layout_height="wrap_content" android:paddingStart="16dp" android:paddingEnd="16dp" - android:paddingBottom="16dp" android:textColor="@color/darkGray6" android:textSize="32sp" android:textStyle="bold" @@ -60,6 +59,26 @@ app:layout_constraintTop_toTopOf="parent" tools:text="Bitcoin" /> + + + + + + android:layout_marginTop="16dp" + app:layout_constraintTop_toBottomOf="@id/barrier_currency_title" /> From a248994ef032f1e21fee78c4b0862eec2e9ca0e6 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sat, 26 Jun 2021 23:11:17 +0300 Subject: [PATCH 6/8] Updated on 2026-08-14 --- .../tap/common/analytics/AnalyticsEvent.kt | 4 ++ .../analytics/FirebaseAnalyticsHandler.kt | 67 +++++++++++++++++-- .../walletconnect/WalletConnectManager.kt | 29 ++++++-- 3 files changed, 92 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/analytics/AnalyticsEvent.kt b/app/src/main/java/com/tangem/tap/common/analytics/AnalyticsEvent.kt index 4395bd0922..8ddf2f5ad9 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/AnalyticsEvent.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/AnalyticsEvent.kt @@ -8,4 +8,8 @@ enum class AnalyticsEvent(val event: String) { APP_RATING_DISMISS("dismiss_rate_app_warning"), APP_RATING_NEGATIVE("negative_rate_app_feedback"), APP_RATING_POSITIVE("positive_rate_app_feedback"), + WC_SUCCESS_RESPONSE("wallet_connect_success_response"), + WC_INVALID_REQUEST("wallet_connect_invalid_request"), + WC_NEW_SESSION("wallet_connect_new_session"), + WC_SESSION_DISCONNECTED("wallet_connect_session_disconnected"), } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt b/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt index 5a91215e83..f9aea4c495 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/FirebaseAnalyticsHandler.kt @@ -38,8 +38,8 @@ object FirebaseAnalyticsHandler : AnalyticsHandler { params[AnalyticsParam.ERROR_DESCRIPTION] = error.javaClass.simpleName params[AnalyticsParam.ERROR_KEY] = "TangemSdkError" - params.forEach { (key, value) -> - FirebaseCrashlytics.getInstance().setCustomKey(key.param, value) + params.forEach { + FirebaseCrashlytics.getInstance().setCustomKey(it.key.param, it.value) } val cardError = TangemSdk.map(error) FirebaseCrashlytics.getInstance().recordException(cardError) @@ -55,12 +55,55 @@ object FirebaseAnalyticsHandler : AnalyticsHandler { private fun setData(card: Card?, blockchain: Blockchain?): Bundle { if (card == null) return bundleOf() return bundleOf( - AnalyticsParam.BLOCKCHAIN.param to (blockchain?.currency ?: card.cardData?.blockchainName), + AnalyticsParam.BLOCKCHAIN.param to (blockchain?.currency + ?: card.cardData?.blockchainName), AnalyticsParam.BATCH_ID.param to card.cardData?.batchId, AnalyticsParam.FIRMWARE.param to card.firmwareVersion.version ) } + fun logWcEvent(event: WcAnalyticsEvent) { + when (event) { + is WcAnalyticsEvent.Action -> { + + Firebase.analytics.logEvent( + AnalyticsEvent.WC_SUCCESS_RESPONSE.event, bundleOf( + AnalyticsParam.WALLET_CONNECT_ACTION.param to event.action.name + ) + ) + } + is WcAnalyticsEvent.Error -> { + mapOf( + AnalyticsParam.WALLET_CONNECT_ACTION to event.action?.name, + AnalyticsParam.ERROR_DESCRIPTION to event.error.message + ) + .filterNotNull() + .forEach { + FirebaseCrashlytics.getInstance().setCustomKey(it.key.param, it.value) + } + FirebaseCrashlytics.getInstance().recordException(event.error) + } + is WcAnalyticsEvent.InvalidRequest -> + Firebase.analytics.logEvent( + AnalyticsEvent.WC_INVALID_REQUEST.event, bundleOf( + AnalyticsParam.WALLET_CONNECT_REQUEST.param to event.json + ) + ) + is WcAnalyticsEvent.Session -> { + val analyticsEvent = when (event.event) { + WcSessionEvent.Disconnect -> AnalyticsEvent.WC_SESSION_DISCONNECTED + WcSessionEvent.Connect -> AnalyticsEvent.WC_NEW_SESSION + } + Firebase.analytics.logEvent( + analyticsEvent.event, bundleOf( + AnalyticsParam.WALLET_CONNECT_DAPP_URL.param to event.url + ) + ) + } + } + + } + enum class AnalyticsParam(val param: String) { BLOCKCHAIN("blockchain"), BATCH_ID("batch_id"), @@ -70,6 +113,9 @@ object FirebaseAnalyticsHandler : AnalyticsHandler { ERROR_CODE("error_code"), NEW_SECURITY_OPTION("new_security_option"), ERROR_KEY("Tangem SDK error key"), + WALLET_CONNECT_ACTION("wallet_connect_action"), + WALLET_CONNECT_REQUEST("wallet_connect_request"), + WALLET_CONNECT_DAPP_URL("wallet_connect_dapp_url"), } enum class ActionToLog(val key: String) { @@ -83,4 +129,17 @@ object FirebaseAnalyticsHandler : AnalyticsHandler { PurgeWallet("purge_wallet"), WriteIssuerData("write_issuer_data"), } -} \ No newline at end of file + + enum class WcSessionEvent { Disconnect, Connect } + + sealed class WcAnalyticsEvent { + data class Error(val error: Throwable, val action: WcAction?) : + WcAnalyticsEvent() + + data class Session(val event: WcSessionEvent, val url: String?) : WcAnalyticsEvent() + data class Action(val action: WcAction) : WcAnalyticsEvent() + data class InvalidRequest(val json: String?) : WcAnalyticsEvent() + } + + enum class WcAction { PersonalSign, SignTransaction, SendTransaction } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt index 44eece7399..9e11e4920d 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt @@ -3,6 +3,7 @@ package com.tangem.tap.domain.walletconnect import com.tangem.blockchain.common.Blockchain import com.tangem.common.extensions.guard import com.tangem.common.extensions.hexToBytes +import com.tangem.tap.common.analytics.FirebaseAnalyticsHandler import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.details.redux.walletconnect.* @@ -16,10 +17,7 @@ import com.trustwallet.walletconnect.models.ethereum.WCEthereumTransaction import com.trustwallet.walletconnect.models.session.WCSession import com.trustwallet.walletconnect.models.session.WCSessionUpdate import kotlinx.coroutines.launch -import okhttp3.Interceptor -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.Response +import okhttp3.* import okhttp3.logging.HttpLoggingInterceptor import timber.log.Timber import java.util.* @@ -136,6 +134,10 @@ class WalletConnectManager { } private fun onSessionClosed(session: WCSession) { + FirebaseAnalyticsHandler.logWcEvent( + FirebaseAnalyticsHandler.WcAnalyticsEvent.Session( + FirebaseAnalyticsHandler.WcSessionEvent.Disconnect, sessions[session]?.peerMeta?.url) + ) sessions.remove(session) walletConnectRepository.removeSession(session) store.dispatchOnMain(WalletConnectAction.RemoveSession(session)) @@ -235,6 +237,10 @@ class WalletConnectManager { store.dispatchOnMain(WalletConnectAction.AcceptOpeningSession( sessionData)) } + FirebaseAnalyticsHandler.logWcEvent( + FirebaseAnalyticsHandler.WcAnalyticsEvent.Session( + FirebaseAnalyticsHandler.WcSessionEvent.Connect, peer.url) + ) } } client.onSessionUpdate = { id: Long, update: WCSessionUpdate -> @@ -244,6 +250,11 @@ class WalletConnectManager { } client.onEthSendTransaction = { id: Long, transaction: WCEthereumTransaction -> Timber.d("onEthSendTransaction: $transaction") + FirebaseAnalyticsHandler.logWcEvent( + FirebaseAnalyticsHandler.WcAnalyticsEvent.Action( + FirebaseAnalyticsHandler.WcAction.SendTransaction + ) + ) sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> store.dispatchOnMain(WalletConnectAction.HandleTransactionRequest( transaction = transaction, @@ -256,6 +267,11 @@ class WalletConnectManager { } client.onEthSignTransaction = { id: Long, transaction: WCEthereumTransaction -> Timber.d("onEthSignTransaction: $transaction") + FirebaseAnalyticsHandler.logWcEvent( + FirebaseAnalyticsHandler.WcAnalyticsEvent.Action( + FirebaseAnalyticsHandler.WcAction.SignTransaction + ) + ) sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> store.dispatchOnMain(WalletConnectAction.HandleTransactionRequest( transaction = transaction, @@ -267,6 +283,11 @@ class WalletConnectManager { } client.onEthSign = { id: Long, message: WCEthereumSignMessage -> Timber.d("onEthSign: $message") + FirebaseAnalyticsHandler.logWcEvent( + FirebaseAnalyticsHandler.WcAnalyticsEvent.Action( + FirebaseAnalyticsHandler.WcAction.PersonalSign + ) + ) sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> store.dispatchOnMain(WalletConnectAction.HandlePersonalSignRequest( message, From a4f979ca5f358d7e5c2f26dc03b1fb213c359eff Mon Sep 17 00:00:00 2001 From: Tangem Date: Sat, 26 Jun 2021 23:13:02 +0300 Subject: [PATCH 7/8] Updated on 2026-08-14 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index e188911f47..65d2e04b9a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,7 +77,7 @@ dependencies { implementation 'com.google.android.play:core-ktx:1.8.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' - implementation 'com.tangem:blockchain:develop-26' + implementation 'com.tangem:blockchain:BSK-84_testnets-27' implementation 'com.tangem:core:fixes_for_app_release-44' implementation 'com.tangem:sdk:fixes_for_app_release-44' From fd11adcb8bf50b594ece026e9eab29e65cb3a1de Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 29 Jun 2021 12:59:16 +0300 Subject: [PATCH 8/8] Updated on 2026-08-14 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index e188911f47..d94e9cbb30 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,7 +50,7 @@ android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 - coreLibraryDesugaringEnabled true + coreLibraryDesugaringEnabled false } packagingOptions { exclude 'lib/x86_64/darwin/libscrypt.dylib'