Updated on 2026-08-14
This commit is contained in:
parent
e26394399f
commit
f506db9c0e
38 changed files with 1182 additions and 406 deletions
|
|
@ -2,10 +2,11 @@ package com.tangem.datasource.api.common.adapter
|
|||
|
||||
import com.squareup.moshi.*
|
||||
import com.squareup.moshi.adapters.EnumJsonAdapter
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.StakingActionTypeDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.TokenDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldBalanceWrapperDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.*
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionStatusDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionTypeDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingTransactionStatusDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingTransactionTypeDTO
|
||||
|
||||
/**
|
||||
* Object to create a adapter for enum types with support for unknown enum values.
|
||||
|
|
@ -20,11 +21,14 @@ object UnknownEnumMoshiAdapter {
|
|||
|
||||
fun Moshi.Builder.addStakeKitEnumFallbackAdapters(): Moshi.Builder {
|
||||
val map = mapOf(
|
||||
TokenDTO.NetworkTypeDTO::class.java to TokenDTO.NetworkTypeDTO.UNKNOWN,
|
||||
NetworkTypeDTO::class.java to NetworkTypeDTO.UNKNOWN,
|
||||
StakingActionTypeDTO::class.java to StakingActionTypeDTO.UNKNOWN,
|
||||
YieldDTO.RewardTypeDTO::class.java to YieldDTO.RewardTypeDTO.UNKNOWN,
|
||||
YieldBalanceWrapperDTO.BalanceDTO.BalanceType::class.java to
|
||||
YieldBalanceWrapperDTO.BalanceDTO.BalanceType.UNKNOWN,
|
||||
StakingTransactionTypeDTO::class.java to StakingTransactionTypeDTO.UNKNOWN,
|
||||
StakingTransactionStatusDTO::class.java to StakingTransactionStatusDTO.UNKNOWN,
|
||||
StakingActionStatusDTO::class.java to StakingActionStatusDTO.UNKNOWN,
|
||||
)
|
||||
|
||||
return apply {
|
||||
|
|
|
|||
|
|
@ -1,17 +1,14 @@
|
|||
package com.tangem.datasource.api.stakekit
|
||||
|
||||
import com.tangem.datasource.api.common.response.ApiResponse
|
||||
import com.tangem.datasource.api.stakekit.models.request.YieldBalanceRequestBody
|
||||
import com.tangem.datasource.api.stakekit.models.request.RevenueOption
|
||||
import com.tangem.datasource.api.stakekit.models.request.YieldType
|
||||
import com.tangem.datasource.api.stakekit.models.request.*
|
||||
import com.tangem.datasource.api.stakekit.models.response.EnabledYieldsResponse
|
||||
import com.tangem.datasource.api.stakekit.models.response.EnterActionResponse
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingTransactionDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.TokenWithYieldDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldBalanceWrapperDTO
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Path
|
||||
import retrofit2.http.Query
|
||||
import retrofit2.http.*
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
interface StakeKitApi {
|
||||
|
|
@ -45,4 +42,19 @@ interface StakeKitApi {
|
|||
|
||||
@GET("tokens")
|
||||
suspend fun getTokens(): ApiResponse<List<TokenWithYieldDTO>>
|
||||
|
||||
@POST("actions/enter")
|
||||
suspend fun createEnterAction(@Body body: EnterActionRequestBody): ApiResponse<EnterActionResponse>
|
||||
|
||||
@PATCH("transactions/{transactionId}")
|
||||
suspend fun constructTransaction(
|
||||
@Path("transactionId") transactionId: String,
|
||||
@Body body: ConstructTransactionRequestBody,
|
||||
): ApiResponse<StakingTransactionDTO>
|
||||
|
||||
@POST("transactions/{transactionId}/submit_hash")
|
||||
suspend fun submitTransactionHash(
|
||||
@Path("transactionId") transactionId: String,
|
||||
@Body body: SubmitTransactionHashRequestBody,
|
||||
): ApiResponse<Unit>
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package com.tangem.datasource.api.stakekit.models.request
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
data class Address(
|
||||
@Json(name = "address")
|
||||
val address: String,
|
||||
@Json(name = "additionalAddresses")
|
||||
val additionalAddresses: AdditionalAddresses? = null,
|
||||
@Json(name = "explorerUrl")
|
||||
val explorerUrl: String? = null,
|
||||
) {
|
||||
|
||||
data class AdditionalAddresses(
|
||||
// cosmos-specific
|
||||
@Json(name = "cosmosPubKey")
|
||||
val cosmosPubKey: String? = null,
|
||||
|
||||
// binance-specific
|
||||
@Json(name = "binanceBeaconAddress")
|
||||
val binanceBeaconAddress: String? = null,
|
||||
|
||||
// solana-specific
|
||||
@Json(name = "stakeAccounts")
|
||||
val stakeAccounts: List<String>? = null,
|
||||
@Json(name = "lidoStakeAccounts")
|
||||
val lidoStakeAccounts: List<String>? = null,
|
||||
|
||||
// tezos-specific
|
||||
@Json(name = "tezosPubKey")
|
||||
val tezosPubKey: String? = null,
|
||||
|
||||
// avalanche-specific
|
||||
@Json(name = "cAddressBech")
|
||||
val cAddressBech: String? = null,
|
||||
@Json(name = "pAddressBech")
|
||||
val pAddressBech: String? = null,
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.tangem.datasource.api.stakekit.models.request
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import java.math.BigDecimal
|
||||
|
||||
data class ConstructTransactionRequestBody(
|
||||
@Json(name = "gasArgs")
|
||||
val gasArgs: GasArgs? = null,
|
||||
@Json(name = "ledgerWalletAPICompatible")
|
||||
val ledgerWalletAPICompatible: Boolean? = null,
|
||||
) {
|
||||
data class GasArgs(
|
||||
// cosmos-specific
|
||||
@Json(name = "gasPrice")
|
||||
val gasPrice: BigDecimal? = null,
|
||||
// EVM eip 1559 specific
|
||||
@Json(name = "type")
|
||||
val type: Int? = null,
|
||||
@Json(name = "maxFeePerGas")
|
||||
val maxFeePerGas: BigDecimal? = null,
|
||||
@Json(name = "maxPriorityFeePerGas")
|
||||
val maxPriorityFeePerGas: BigDecimal? = null,
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
package com.tangem.datasource.api.stakekit.models.request
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.TokenDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldBalanceWrapperDTO
|
||||
|
||||
data class EnterActionRequestBody(
|
||||
@Json(name = "integrationId")
|
||||
val integrationId: String,
|
||||
@Json(name = "addresses")
|
||||
val addresses: Address,
|
||||
@Json(name = "args")
|
||||
val args: EnterActionRequestBodyArgs,
|
||||
@Json(name = "referralCode")
|
||||
val referralCode: String? = null,
|
||||
) {
|
||||
|
||||
data class EnterActionRequestBodyArgs(
|
||||
@Json(name = "amount")
|
||||
val amount: String,
|
||||
@Json(name = "validatorAddress")
|
||||
val validatorAddress: String? = null,
|
||||
@Json(name = "validatorAddresses")
|
||||
val validatorAddresses: List<String>? = null,
|
||||
@Json(name = "providerId")
|
||||
val providerId: String? = null,
|
||||
@Json(name = "duration")
|
||||
val duration: String? = null,
|
||||
@Json(name = "nfts")
|
||||
val nfts: List<YieldBalanceWrapperDTO.BalanceDTO.PendingAction.PendingActionArgs.Nft>? = null,
|
||||
@Json(name = "ledgerWalletAPICompatible")
|
||||
val ledgerWalletAPICompatible: Boolean? = null,
|
||||
@Json(name = "tronResource")
|
||||
val tronResource: String? = null,
|
||||
@Json(name = "signatureVerification")
|
||||
val signatureVerification: SignatureVerification? = null,
|
||||
@Json(name = "inputToken")
|
||||
val inputToken: TokenDTO? = null,
|
||||
)
|
||||
|
||||
data class SignatureVerification(
|
||||
@Json(name = "message")
|
||||
val message: String,
|
||||
@Json(name = "signed")
|
||||
val signed: String,
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package com.tangem.datasource.api.stakekit.models.request
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
data class SubmitTransactionHashRequestBody(
|
||||
@Json(name = "hash")
|
||||
val hash: String,
|
||||
)
|
||||
|
|
@ -8,23 +8,6 @@ data class YieldBalanceRequestBody(
|
|||
@Json(name = "integrationId") val integrationId: String? = null,
|
||||
) {
|
||||
|
||||
data class Address(
|
||||
@Json(name = "address") val address: String,
|
||||
@Json(name = "additionalAddresses") val additionalAddresses: AdditionalAddresses? = null,
|
||||
@Json(name = "explorerUrl") val explorerUrl: String,
|
||||
) {
|
||||
|
||||
data class AdditionalAddresses(
|
||||
@Json(name = "cosmosPubKey") val cosmosPubKey: String? = null,
|
||||
@Json(name = "binanceBeaconAddress") val binanceBeaconAddress: String? = null,
|
||||
@Json(name = "stakeAccounts") val stakeAccounts: List<String>? = null,
|
||||
@Json(name = "lidoStakeAccounts") val lidoStakeAccounts: List<String>? = null,
|
||||
@Json(name = "tezosPubKey") val tezosPubKey: String? = null,
|
||||
@Json(name = "cAddressBech") val cAddressBech: String? = null,
|
||||
@Json(name = "pAddressBech") val pAddressBech: String? = null,
|
||||
)
|
||||
}
|
||||
|
||||
data class YieldBalanceRequestArgs(
|
||||
@Json(name = "validatorAddresses") val validatorAddresses: List<String>,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
package com.tangem.datasource.api.stakekit.models.response
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionStatusDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionTypeDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingTransactionDTO
|
||||
import org.joda.time.DateTime
|
||||
import java.math.BigDecimal
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class EnterActionResponse(
|
||||
@Json(name = "id")
|
||||
val id: String,
|
||||
@Json(name = "integrationId")
|
||||
val integrationId: String,
|
||||
@Json(name = "status")
|
||||
val status: StakingActionStatusDTO,
|
||||
@Json(name = "type")
|
||||
val type: StakingActionTypeDTO,
|
||||
@Json(name = "currentStepIndex")
|
||||
val currentStepIndex: Int,
|
||||
@Json(name = "amount")
|
||||
val amount: BigDecimal,
|
||||
@Json(name = "validatorAddress")
|
||||
val validatorAddress: String?,
|
||||
@Json(name = "validatorAddresses")
|
||||
val validatorAddresses: List<String>?,
|
||||
@Json(name = "transactions")
|
||||
val transactions: List<StakingTransactionDTO>?,
|
||||
@Json(name = "createdAt")
|
||||
val createdAt: DateTime,
|
||||
)
|
||||
|
|
@ -0,0 +1,205 @@
|
|||
package com.tangem.datasource.api.stakekit.models.response.model
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
enum class NetworkTypeDTO {
|
||||
@Json(name = "avalanche-c")
|
||||
AVALANCHE_C,
|
||||
|
||||
@Json(name = "avalanche-atomic")
|
||||
AVALANCHE_ATOMIC,
|
||||
|
||||
@Json(name = "avalanche-p")
|
||||
AVALANCHE_P,
|
||||
|
||||
@Json(name = "arbitrum")
|
||||
ARBITRUM,
|
||||
|
||||
@Json(name = "binance")
|
||||
BINANCE,
|
||||
|
||||
@Json(name = "celo")
|
||||
CELO,
|
||||
|
||||
@Json(name = "ethereum")
|
||||
ETHEREUM,
|
||||
|
||||
@Json(name = "ethereum-goerli")
|
||||
ETHEREUM_GOERLI,
|
||||
|
||||
@Json(name = "ethereum-holesky")
|
||||
ETHEREUM_HOLESKY,
|
||||
|
||||
@Json(name = "fantom")
|
||||
FANTOM,
|
||||
|
||||
@Json(name = "harmony")
|
||||
HARMONY,
|
||||
|
||||
@Json(name = "optimism")
|
||||
OPTIMISM,
|
||||
|
||||
@Json(name = "polygon")
|
||||
POLYGON,
|
||||
|
||||
@Json(name = "gnosis")
|
||||
GNOSIS,
|
||||
|
||||
@Json(name = "moonriver")
|
||||
MOONRIVER,
|
||||
|
||||
@Json(name = "okc")
|
||||
OKC,
|
||||
|
||||
@Json(name = "zksync")
|
||||
ZKSYNC,
|
||||
|
||||
@Json(name = "viction")
|
||||
VICTION,
|
||||
|
||||
@Json(name = "agoric")
|
||||
AGORIC,
|
||||
|
||||
@Json(name = "akash")
|
||||
AKASH,
|
||||
|
||||
@Json(name = "axelar")
|
||||
AXELAR,
|
||||
|
||||
@Json(name = "band-protocol")
|
||||
BAND_PROTOCOL,
|
||||
|
||||
@Json(name = "bitsong")
|
||||
BITSONG,
|
||||
|
||||
@Json(name = "canto")
|
||||
CANTO,
|
||||
|
||||
@Json(name = "chihuahua")
|
||||
CHIHUAHUA,
|
||||
|
||||
@Json(name = "comdex")
|
||||
COMDEX,
|
||||
|
||||
@Json(name = "coreum")
|
||||
COREUM,
|
||||
|
||||
@Json(name = "cosmos")
|
||||
COSMOS,
|
||||
|
||||
@Json(name = "crescent")
|
||||
CRESCENT,
|
||||
|
||||
@Json(name = "cronos")
|
||||
CRONOS,
|
||||
|
||||
@Json(name = "cudos")
|
||||
CUDOS,
|
||||
|
||||
@Json(name = "desmos")
|
||||
DESMOS,
|
||||
|
||||
@Json(name = "dydx")
|
||||
DYDX,
|
||||
|
||||
@Json(name = "evmos")
|
||||
EVMOS,
|
||||
|
||||
@Json(name = "fetch-ai")
|
||||
FETCH_AI,
|
||||
|
||||
@Json(name = "gravity-bridge")
|
||||
GRAVITY_BRIDGE,
|
||||
|
||||
@Json(name = "injective")
|
||||
INJECTIVE,
|
||||
|
||||
@Json(name = "irisnet")
|
||||
IRISNET,
|
||||
|
||||
@Json(name = "juno")
|
||||
JUNO,
|
||||
|
||||
@Json(name = "kava")
|
||||
KAVA,
|
||||
|
||||
@Json(name = "ki-network")
|
||||
KI_NETWORK,
|
||||
|
||||
@Json(name = "mars-protocol")
|
||||
MARS_PROTOCOL,
|
||||
|
||||
@Json(name = "nym")
|
||||
NYM,
|
||||
|
||||
@Json(name = "okex-chain")
|
||||
OKEX_CHAIN,
|
||||
|
||||
@Json(name = "onomy")
|
||||
ONOMY,
|
||||
|
||||
@Json(name = "osmosis")
|
||||
OSMOSIS,
|
||||
|
||||
@Json(name = "persistence")
|
||||
PERSISTENCE,
|
||||
|
||||
@Json(name = "quicksilver")
|
||||
QUICKSILVER,
|
||||
|
||||
@Json(name = "regen")
|
||||
REGEN,
|
||||
|
||||
@Json(name = "secret")
|
||||
SECRET,
|
||||
|
||||
@Json(name = "sentinel")
|
||||
SENTINEL,
|
||||
|
||||
@Json(name = "sommelier")
|
||||
SOMMELIER,
|
||||
|
||||
@Json(name = "stafi")
|
||||
STAFI,
|
||||
|
||||
@Json(name = "stargaze")
|
||||
STARGAZE,
|
||||
|
||||
@Json(name = "stride")
|
||||
STRIDE,
|
||||
|
||||
@Json(name = "teritori")
|
||||
TERITORI,
|
||||
|
||||
@Json(name = "tgrade")
|
||||
TGRADE,
|
||||
|
||||
@Json(name = "umee")
|
||||
UMEE,
|
||||
|
||||
@Json(name = "polkadot")
|
||||
POLKADOT,
|
||||
|
||||
@Json(name = "kusama")
|
||||
KUSAMA,
|
||||
|
||||
@Json(name = "westend")
|
||||
WESTEND,
|
||||
|
||||
@Json(name = "binancebeacon")
|
||||
BINANCEBEACON,
|
||||
|
||||
@Json(name = "near")
|
||||
NEAR,
|
||||
|
||||
@Json(name = "solana")
|
||||
SOLANA,
|
||||
|
||||
@Json(name = "tezos")
|
||||
TEZOS,
|
||||
|
||||
@Json(name = "tron")
|
||||
TRON,
|
||||
|
||||
UNKNOWN,
|
||||
}
|
||||
|
|
@ -5,214 +5,20 @@ import com.squareup.moshi.JsonClass
|
|||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class TokenDTO(
|
||||
@Json(name = "name") val name: String,
|
||||
@Json(name = "network") val network: NetworkTypeDTO,
|
||||
@Json(name = "symbol") val symbol: String,
|
||||
@Json(name = "decimals") val decimals: Int,
|
||||
@Json(name = "address") val address: String?,
|
||||
@Json(name = "coinGeckoId") val coinGeckoId: String?,
|
||||
@Json(name = "logoURI") val logoURI: String?,
|
||||
@Json(name = "isPoints") val isPoints: Boolean?,
|
||||
) {
|
||||
enum class NetworkTypeDTO {
|
||||
@Json(name = "avalanche-c")
|
||||
AVALANCHE_C,
|
||||
|
||||
@Json(name = "avalanche-atomic")
|
||||
AVALANCHE_ATOMIC,
|
||||
|
||||
@Json(name = "avalanche-p")
|
||||
AVALANCHE_P,
|
||||
|
||||
@Json(name = "arbitrum")
|
||||
ARBITRUM,
|
||||
|
||||
@Json(name = "binance")
|
||||
BINANCE,
|
||||
|
||||
@Json(name = "celo")
|
||||
CELO,
|
||||
|
||||
@Json(name = "ethereum")
|
||||
ETHEREUM,
|
||||
|
||||
@Json(name = "ethereum-goerli")
|
||||
ETHEREUM_GOERLI,
|
||||
|
||||
@Json(name = "ethereum-holesky")
|
||||
ETHEREUM_HOLESKY,
|
||||
|
||||
@Json(name = "fantom")
|
||||
FANTOM,
|
||||
|
||||
@Json(name = "harmony")
|
||||
HARMONY,
|
||||
|
||||
@Json(name = "optimism")
|
||||
OPTIMISM,
|
||||
|
||||
@Json(name = "polygon")
|
||||
POLYGON,
|
||||
|
||||
@Json(name = "gnosis")
|
||||
GNOSIS,
|
||||
|
||||
@Json(name = "moonriver")
|
||||
MOONRIVER,
|
||||
|
||||
@Json(name = "okc")
|
||||
OKC,
|
||||
|
||||
@Json(name = "zksync")
|
||||
ZKSYNC,
|
||||
|
||||
@Json(name = "viction")
|
||||
VICTION,
|
||||
|
||||
@Json(name = "agoric")
|
||||
AGORIC,
|
||||
|
||||
@Json(name = "akash")
|
||||
AKASH,
|
||||
|
||||
@Json(name = "axelar")
|
||||
AXELAR,
|
||||
|
||||
@Json(name = "band-protocol")
|
||||
BAND_PROTOCOL,
|
||||
|
||||
@Json(name = "bitsong")
|
||||
BITSONG,
|
||||
|
||||
@Json(name = "canto")
|
||||
CANTO,
|
||||
|
||||
@Json(name = "chihuahua")
|
||||
CHIHUAHUA,
|
||||
|
||||
@Json(name = "comdex")
|
||||
COMDEX,
|
||||
|
||||
@Json(name = "coreum")
|
||||
COREUM,
|
||||
|
||||
@Json(name = "cosmos")
|
||||
COSMOS,
|
||||
|
||||
@Json(name = "crescent")
|
||||
CRESCENT,
|
||||
|
||||
@Json(name = "cronos")
|
||||
CRONOS,
|
||||
|
||||
@Json(name = "cudos")
|
||||
CUDOS,
|
||||
|
||||
@Json(name = "desmos")
|
||||
DESMOS,
|
||||
|
||||
@Json(name = "dydx")
|
||||
DYDX,
|
||||
|
||||
@Json(name = "evmos")
|
||||
EVMOS,
|
||||
|
||||
@Json(name = "fetch-ai")
|
||||
FETCH_AI,
|
||||
|
||||
@Json(name = "gravity-bridge")
|
||||
GRAVITY_BRIDGE,
|
||||
|
||||
@Json(name = "injective")
|
||||
INJECTIVE,
|
||||
|
||||
@Json(name = "irisnet")
|
||||
IRISNET,
|
||||
|
||||
@Json(name = "juno")
|
||||
JUNO,
|
||||
|
||||
@Json(name = "kava")
|
||||
KAVA,
|
||||
|
||||
@Json(name = "ki-network")
|
||||
KI_NETWORK,
|
||||
|
||||
@Json(name = "mars-protocol")
|
||||
MARS_PROTOCOL,
|
||||
|
||||
@Json(name = "nym")
|
||||
NYM,
|
||||
|
||||
@Json(name = "okex-chain")
|
||||
OKEX_CHAIN,
|
||||
|
||||
@Json(name = "onomy")
|
||||
ONOMY,
|
||||
|
||||
@Json(name = "osmosis")
|
||||
OSMOSIS,
|
||||
|
||||
@Json(name = "persistence")
|
||||
PERSISTENCE,
|
||||
|
||||
@Json(name = "quicksilver")
|
||||
QUICKSILVER,
|
||||
|
||||
@Json(name = "regen")
|
||||
REGEN,
|
||||
|
||||
@Json(name = "secret")
|
||||
SECRET,
|
||||
|
||||
@Json(name = "sentinel")
|
||||
SENTINEL,
|
||||
|
||||
@Json(name = "sommelier")
|
||||
SOMMELIER,
|
||||
|
||||
@Json(name = "stafi")
|
||||
STAFI,
|
||||
|
||||
@Json(name = "stargaze")
|
||||
STARGAZE,
|
||||
|
||||
@Json(name = "stride")
|
||||
STRIDE,
|
||||
|
||||
@Json(name = "teritori")
|
||||
TERITORI,
|
||||
|
||||
@Json(name = "tgrade")
|
||||
TGRADE,
|
||||
|
||||
@Json(name = "umee")
|
||||
UMEE,
|
||||
|
||||
@Json(name = "polkadot")
|
||||
POLKADOT,
|
||||
|
||||
@Json(name = "kusama")
|
||||
KUSAMA,
|
||||
|
||||
@Json(name = "westend")
|
||||
WESTEND,
|
||||
|
||||
@Json(name = "binancebeacon")
|
||||
BINANCEBEACON,
|
||||
|
||||
@Json(name = "near")
|
||||
NEAR,
|
||||
|
||||
@Json(name = "solana")
|
||||
SOLANA,
|
||||
|
||||
@Json(name = "tezos")
|
||||
TEZOS,
|
||||
|
||||
@Json(name = "tron")
|
||||
TRON,
|
||||
|
||||
UNKNOWN,
|
||||
}
|
||||
}
|
||||
@Json(name = "name")
|
||||
val name: String,
|
||||
@Json(name = "network")
|
||||
val network: NetworkTypeDTO,
|
||||
@Json(name = "symbol")
|
||||
val symbol: String,
|
||||
@Json(name = "decimals")
|
||||
val decimals: Int,
|
||||
@Json(name = "address")
|
||||
val address: String?,
|
||||
@Json(name = "coinGeckoId")
|
||||
val coinGeckoId: String?,
|
||||
@Json(name = "logoURI")
|
||||
val logoURI: String?,
|
||||
@Json(name = "isPoints")
|
||||
val isPoints: Boolean?,
|
||||
)
|
||||
|
|
@ -2,6 +2,7 @@ package com.tangem.datasource.api.stakekit.models.response.model
|
|||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionTypeDTO
|
||||
import org.joda.time.DateTime
|
||||
import java.math.BigDecimal
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
package com.tangem.datasource.api.stakekit.models.response.model.action
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
enum class StakingActionStatusDTO {
|
||||
@Json(name = "CANCELED")
|
||||
CANCELED,
|
||||
|
||||
@Json(name = "CREATED")
|
||||
CREATED,
|
||||
|
||||
@Json(name = "WAITING_FOR_NEXT")
|
||||
WAITING_FOR_NEXT,
|
||||
|
||||
@Json(name = "PROCESSING")
|
||||
PROCESSING,
|
||||
|
||||
@Json(name = "FAILED")
|
||||
FAILED,
|
||||
|
||||
@Json(name = "SUCCESS")
|
||||
SUCCESS,
|
||||
|
||||
UNKNOWN,
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.tangem.datasource.api.stakekit.models.response.model
|
||||
package com.tangem.datasource.api.stakekit.models.response.model.action
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.tangem.datasource.api.stakekit.models.response.model.transaction
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.TokenDTO
|
||||
import java.math.BigDecimal
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class StakingGasEstimateDTO(
|
||||
@Json(name = "amount")
|
||||
val amount: BigDecimal,
|
||||
@Json(name = "token")
|
||||
val token: TokenDTO,
|
||||
@Json(name = "gasLimit")
|
||||
val gasLimit: BigDecimal,
|
||||
)
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package com.tangem.datasource.api.stakekit.models.response.model.transaction
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.NetworkTypeDTO
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class StakingTransactionDTO(
|
||||
@Json(name = "id")
|
||||
val id: String,
|
||||
@Json(name = "network")
|
||||
val network: NetworkTypeDTO,
|
||||
@Json(name = "status")
|
||||
val status: StakingTransactionStatusDTO,
|
||||
@Json(name = "type")
|
||||
val type: StakingTransactionTypeDTO,
|
||||
@Json(name = "hash")
|
||||
val hash: String?,
|
||||
@Json(name = "signedTransaction")
|
||||
val signedTransaction: String?,
|
||||
@Json(name = "unsignedTransaction")
|
||||
val unsignedTransaction: String?,
|
||||
@Json(name = "stepIndex")
|
||||
val stepIndex: Int,
|
||||
@Json(name = "error")
|
||||
val error: String?,
|
||||
@Json(name = "gasEstimate")
|
||||
val gasEstimate: StakingGasEstimateDTO?,
|
||||
@Json(name = "stakeId")
|
||||
val stakeId: String?,
|
||||
@Json(name = "explorerUrl")
|
||||
val explorerUrl: String?,
|
||||
@Json(name = "ledgerHwAppId")
|
||||
val ledgerHwAppId: String?,
|
||||
@Json(name = "isMessage")
|
||||
val isMessage: Boolean,
|
||||
)
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package com.tangem.datasource.api.stakekit.models.response.model.transaction
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
enum class StakingTransactionStatusDTO {
|
||||
@Json(name = "NOT_FOUND")
|
||||
NOT_FOUND,
|
||||
|
||||
@Json(name = "CREATED")
|
||||
CREATED,
|
||||
|
||||
@Json(name = "BLOCKED")
|
||||
BLOCKED,
|
||||
|
||||
@Json(name = "WAITING_FOR_SIGNATURE")
|
||||
WAITING_FOR_SIGNATURE,
|
||||
|
||||
@Json(name = "SIGNED")
|
||||
SIGNED,
|
||||
|
||||
@Json(name = "BROADCASTED")
|
||||
BROADCASTED,
|
||||
|
||||
@Json(name = "PENDING")
|
||||
PENDING,
|
||||
|
||||
@Json(name = "CONFIRMED")
|
||||
CONFIRMED,
|
||||
|
||||
@Json(name = "FAILED")
|
||||
FAILED,
|
||||
|
||||
@Json(name = "SKIPPED")
|
||||
SKIPPED,
|
||||
|
||||
UNKNOWN,
|
||||
}
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
package com.tangem.datasource.api.stakekit.models.response.model.transaction
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
|
||||
enum class StakingTransactionTypeDTO {
|
||||
@Json(name = "SWAP")
|
||||
SWAP,
|
||||
|
||||
@Json(name = "DEPOSIT")
|
||||
DEPOSIT,
|
||||
|
||||
@Json(name = "APPROVAL")
|
||||
APPROVAL,
|
||||
|
||||
@Json(name = "STAKE")
|
||||
STAKE,
|
||||
|
||||
@Json(name = "CLAIM_UNSTAKED")
|
||||
CLAIM_UNSTAKED,
|
||||
|
||||
@Json(name = "CLAIM_REWARDS")
|
||||
CLAIM_REWARDS,
|
||||
|
||||
@Json(name = "RESTAKE_REWARDS")
|
||||
RESTAKE_REWARDS,
|
||||
|
||||
@Json(name = "UNSTAKE")
|
||||
UNSTAKE,
|
||||
|
||||
@Json(name = "SPLIT")
|
||||
SPLIT,
|
||||
|
||||
@Json(name = "MERGE")
|
||||
MERGE,
|
||||
|
||||
@Json(name = "LOCK")
|
||||
LOCK,
|
||||
|
||||
@Json(name = "UNLOCK")
|
||||
UNLOCK,
|
||||
|
||||
@Json(name = "SUPPLY")
|
||||
SUPPLY,
|
||||
|
||||
@Json(name = "BRIDGE")
|
||||
BRIDGE,
|
||||
|
||||
@Json(name = "VOTE")
|
||||
VOTE,
|
||||
|
||||
@Json(name = "REVOKE")
|
||||
REVOKE,
|
||||
|
||||
@Json(name = "RESTAKE")
|
||||
RESTAKE,
|
||||
|
||||
@Json(name = "REBOND")
|
||||
REBOND,
|
||||
|
||||
@Json(name = "WITHDRAW")
|
||||
WITHDRAW,
|
||||
|
||||
@Json(name = "CREATE_ACCOUNT")
|
||||
CREATE_ACCOUNT,
|
||||
|
||||
@Json(name = "REVEAL")
|
||||
REVEAL,
|
||||
|
||||
@Json(name = "MIGRATE")
|
||||
MIGRATE,
|
||||
|
||||
@Json(name = "UTXO_P_TO_C_IMPORT")
|
||||
UTXO_P_TO_C_IMPORT,
|
||||
|
||||
@Json(name = "UTXO_C_TO_P_IMPORT")
|
||||
UTXO_C_TO_P_IMPORT,
|
||||
|
||||
@Json(name = "UNFREEZE_LEGACY")
|
||||
UNFREEZE_LEGACY,
|
||||
|
||||
@Json(name = "UNFREEZE_LEGACY_BANDWIDTH")
|
||||
UNFREEZE_LEGACY_BANDWIDTH,
|
||||
|
||||
@Json(name = "UNFREEZE_LEGACY_ENERGY")
|
||||
UNFREEZE_LEGACY_ENERGY,
|
||||
|
||||
@Json(name = "UNFREEZE_BANDWIDTH")
|
||||
UNFREEZE_BANDWIDTH,
|
||||
|
||||
@Json(name = "UNFREEZE_ENERGY")
|
||||
UNFREEZE_ENERGY,
|
||||
|
||||
@Json(name = "FREEZE_BANDWIDTH")
|
||||
FREEZE_BANDWIDTH,
|
||||
|
||||
@Json(name = "FREEZE_ENERGY")
|
||||
FREEZE_ENERGY,
|
||||
|
||||
@Json(name = "UNDELEGATE_BANDWIDTH")
|
||||
UNDELEGATE_BANDWIDTH,
|
||||
|
||||
@Json(name = "UNDELEGATE_ENERGY")
|
||||
UNDELEGATE_ENERGY,
|
||||
|
||||
@Json(name = "P2P_NODE_REQUEST")
|
||||
P2P_NODE_REQUEST,
|
||||
|
||||
@Json(name = "LUGANODES_PROVISION")
|
||||
LUGANODES_PROVISION,
|
||||
|
||||
@Json(name = "LUGANODES_EXIT_REQUEST")
|
||||
LUGANODES_EXIT_REQUEST,
|
||||
|
||||
@Json(name = "INFSTONES_PROVISION")
|
||||
INFSTONES_PROVISION,
|
||||
|
||||
@Json(name = "INFSTONES_EXIT_REQUEST")
|
||||
INFSTONES_EXIT_REQUEST,
|
||||
|
||||
@Json(name = "INFSTONES_CLAIM_REQUEST")
|
||||
INFSTONES_CLAIM_REQUEST,
|
||||
|
||||
UNKNOWN,
|
||||
}
|
||||
|
|
@ -2,6 +2,8 @@ package com.tangem.data.staking
|
|||
|
||||
import com.tangem.blockchain.common.Blockchain
|
||||
import com.tangem.blockchainsdk.utils.toCoinId
|
||||
import com.tangem.data.staking.converters.StakingNetworkTypeConverter
|
||||
import com.tangem.data.staking.converters.TokenConverter
|
||||
import com.tangem.data.staking.converters.YieldConverter
|
||||
import com.tangem.datasource.api.common.response.getOrThrow
|
||||
import com.tangem.datasource.api.stakekit.StakeKitApi
|
||||
|
|
@ -20,7 +22,14 @@ internal class DefaultStakingRepository(
|
|||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
) : StakingRepository {
|
||||
|
||||
private val yieldConverter = YieldConverter()
|
||||
private val stakingNetworkTypeConverter = StakingNetworkTypeConverter()
|
||||
|
||||
private val tokenConverter = TokenConverter(
|
||||
stakingNetworkTypeConverter = stakingNetworkTypeConverter,
|
||||
)
|
||||
private val yieldConverter = YieldConverter(
|
||||
tokenConverter = tokenConverter,
|
||||
)
|
||||
|
||||
override fun isStakingSupported(currencyId: String): Boolean {
|
||||
return integrationIds.contains(currencyId)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,81 @@
|
|||
package com.tangem.data.staking.converters
|
||||
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.NetworkTypeDTO
|
||||
import com.tangem.domain.staking.model.NetworkType
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
@Suppress("CyclomaticComplexMethod", "LongMethod")
|
||||
class StakingNetworkTypeConverter : Converter<NetworkTypeDTO, NetworkType> {
|
||||
|
||||
override fun convert(value: NetworkTypeDTO): NetworkType {
|
||||
return when (value) {
|
||||
NetworkTypeDTO.AVALANCHE_C -> NetworkType.AVALANCHE_C
|
||||
NetworkTypeDTO.AVALANCHE_ATOMIC -> NetworkType.AVALANCHE_ATOMIC
|
||||
NetworkTypeDTO.AVALANCHE_P -> NetworkType.AVALANCHE_P
|
||||
NetworkTypeDTO.ARBITRUM -> NetworkType.ARBITRUM
|
||||
NetworkTypeDTO.BINANCE -> NetworkType.BINANCE
|
||||
NetworkTypeDTO.CELO -> NetworkType.CELO
|
||||
NetworkTypeDTO.ETHEREUM -> NetworkType.ETHEREUM
|
||||
NetworkTypeDTO.ETHEREUM_GOERLI -> NetworkType.ETHEREUM_GOERLI
|
||||
NetworkTypeDTO.ETHEREUM_HOLESKY -> NetworkType.ETHEREUM_HOLESKY
|
||||
NetworkTypeDTO.FANTOM -> NetworkType.FANTOM
|
||||
NetworkTypeDTO.HARMONY -> NetworkType.HARMONY
|
||||
NetworkTypeDTO.OPTIMISM -> NetworkType.OPTIMISM
|
||||
NetworkTypeDTO.POLYGON -> NetworkType.POLYGON
|
||||
NetworkTypeDTO.GNOSIS -> NetworkType.GNOSIS
|
||||
NetworkTypeDTO.MOONRIVER -> NetworkType.MOONRIVER
|
||||
NetworkTypeDTO.OKC -> NetworkType.OKC
|
||||
NetworkTypeDTO.ZKSYNC -> NetworkType.ZKSYNC
|
||||
NetworkTypeDTO.VICTION -> NetworkType.VICTION
|
||||
NetworkTypeDTO.AGORIC -> NetworkType.AGORIC
|
||||
NetworkTypeDTO.AKASH -> NetworkType.AKASH
|
||||
NetworkTypeDTO.AXELAR -> NetworkType.AXELAR
|
||||
NetworkTypeDTO.BAND_PROTOCOL -> NetworkType.BAND_PROTOCOL
|
||||
NetworkTypeDTO.BITSONG -> NetworkType.BITSONG
|
||||
NetworkTypeDTO.CANTO -> NetworkType.CANTO
|
||||
NetworkTypeDTO.CHIHUAHUA -> NetworkType.CHIHUAHUA
|
||||
NetworkTypeDTO.COMDEX -> NetworkType.COMDEX
|
||||
NetworkTypeDTO.COREUM -> NetworkType.COREUM
|
||||
NetworkTypeDTO.COSMOS -> NetworkType.COSMOS
|
||||
NetworkTypeDTO.CRESCENT -> NetworkType.CRESCENT
|
||||
NetworkTypeDTO.CRONOS -> NetworkType.CRONOS
|
||||
NetworkTypeDTO.CUDOS -> NetworkType.CUDOS
|
||||
NetworkTypeDTO.DESMOS -> NetworkType.DESMOS
|
||||
NetworkTypeDTO.DYDX -> NetworkType.DYDX
|
||||
NetworkTypeDTO.EVMOS -> NetworkType.EVMOS
|
||||
NetworkTypeDTO.FETCH_AI -> NetworkType.FETCH_AI
|
||||
NetworkTypeDTO.GRAVITY_BRIDGE -> NetworkType.GRAVITY_BRIDGE
|
||||
NetworkTypeDTO.INJECTIVE -> NetworkType.INJECTIVE
|
||||
NetworkTypeDTO.IRISNET -> NetworkType.IRISNET
|
||||
NetworkTypeDTO.JUNO -> NetworkType.JUNO
|
||||
NetworkTypeDTO.KAVA -> NetworkType.KAVA
|
||||
NetworkTypeDTO.KI_NETWORK -> NetworkType.KI_NETWORK
|
||||
NetworkTypeDTO.MARS_PROTOCOL -> NetworkType.MARS_PROTOCOL
|
||||
NetworkTypeDTO.NYM -> NetworkType.NYM
|
||||
NetworkTypeDTO.OKEX_CHAIN -> NetworkType.OKEX_CHAIN
|
||||
NetworkTypeDTO.ONOMY -> NetworkType.ONOMY
|
||||
NetworkTypeDTO.OSMOSIS -> NetworkType.OSMOSIS
|
||||
NetworkTypeDTO.PERSISTENCE -> NetworkType.PERSISTENCE
|
||||
NetworkTypeDTO.QUICKSILVER -> NetworkType.QUICKSILVER
|
||||
NetworkTypeDTO.REGEN -> NetworkType.REGEN
|
||||
NetworkTypeDTO.SECRET -> NetworkType.SECRET
|
||||
NetworkTypeDTO.SENTINEL -> NetworkType.SENTINEL
|
||||
NetworkTypeDTO.SOMMELIER -> NetworkType.SOMMELIER
|
||||
NetworkTypeDTO.STAFI -> NetworkType.STAFI
|
||||
NetworkTypeDTO.STARGAZE -> NetworkType.STARGAZE
|
||||
NetworkTypeDTO.STRIDE -> NetworkType.STRIDE
|
||||
NetworkTypeDTO.TERITORI -> NetworkType.TERITORI
|
||||
NetworkTypeDTO.TGRADE -> NetworkType.TGRADE
|
||||
NetworkTypeDTO.UMEE -> NetworkType.UMEE
|
||||
NetworkTypeDTO.POLKADOT -> NetworkType.POLKADOT
|
||||
NetworkTypeDTO.KUSAMA -> NetworkType.KUSAMA
|
||||
NetworkTypeDTO.WESTEND -> NetworkType.WESTEND
|
||||
NetworkTypeDTO.BINANCEBEACON -> NetworkType.BINANCEBEACON
|
||||
NetworkTypeDTO.NEAR -> NetworkType.NEAR
|
||||
NetworkTypeDTO.SOLANA -> NetworkType.SOLANA
|
||||
NetworkTypeDTO.TEZOS -> NetworkType.TEZOS
|
||||
NetworkTypeDTO.TRON -> NetworkType.TRON
|
||||
else -> NetworkType.UNKNOWN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.tangem.data.staking.converters
|
||||
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.TokenDTO
|
||||
import com.tangem.domain.staking.model.Token
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
class TokenConverter(
|
||||
private val stakingNetworkTypeConverter: StakingNetworkTypeConverter,
|
||||
) : Converter<TokenDTO, Token> {
|
||||
|
||||
override fun convert(value: TokenDTO): Token {
|
||||
return Token(
|
||||
name = value.name,
|
||||
network = stakingNetworkTypeConverter.convert(value.network),
|
||||
symbol = value.symbol,
|
||||
decimals = value.decimals,
|
||||
address = value.address,
|
||||
coinGeckoId = value.coinGeckoId,
|
||||
logoURI = value.logoURI,
|
||||
isPoints = value.isPoints,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +1,19 @@
|
|||
package com.tangem.data.staking.converters
|
||||
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.AddressArgumentDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.TokenDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO
|
||||
import com.tangem.domain.staking.model.*
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
class YieldConverter : Converter<YieldDTO, Yield> {
|
||||
class YieldConverter(
|
||||
private val tokenConverter: TokenConverter,
|
||||
) : Converter<YieldDTO, Yield> {
|
||||
|
||||
override fun convert(value: YieldDTO): Yield {
|
||||
return Yield(
|
||||
id = value.id,
|
||||
token = convertToken(value.token),
|
||||
tokens = value.tokens.map { convertToken(it) },
|
||||
token = tokenConverter.convert(value.token),
|
||||
tokens = value.tokens.map { tokenConverter.convert(it) },
|
||||
args = convertArgs(value.args),
|
||||
status = convertStatus(value.status),
|
||||
apy = value.apy,
|
||||
|
|
@ -24,92 +25,6 @@ class YieldConverter : Converter<YieldDTO, Yield> {
|
|||
)
|
||||
}
|
||||
|
||||
private fun convertToken(tokenDTO: TokenDTO): Token {
|
||||
return Token(
|
||||
name = tokenDTO.name,
|
||||
network = convertNetworkType(tokenDTO.network),
|
||||
symbol = tokenDTO.symbol,
|
||||
decimals = tokenDTO.decimals,
|
||||
address = tokenDTO.address,
|
||||
coinGeckoId = tokenDTO.coinGeckoId,
|
||||
logoURI = tokenDTO.logoURI,
|
||||
isPoints = tokenDTO.isPoints,
|
||||
)
|
||||
}
|
||||
|
||||
@Suppress("LongMethod", "CyclomaticComplexMethod")
|
||||
private fun convertNetworkType(networkTypeDTO: TokenDTO.NetworkTypeDTO): Token.NetworkType {
|
||||
return when (networkTypeDTO) {
|
||||
TokenDTO.NetworkTypeDTO.AVALANCHE_C -> Token.NetworkType.AVALANCHE_C
|
||||
TokenDTO.NetworkTypeDTO.AVALANCHE_ATOMIC -> Token.NetworkType.AVALANCHE_ATOMIC
|
||||
TokenDTO.NetworkTypeDTO.AVALANCHE_P -> Token.NetworkType.AVALANCHE_P
|
||||
TokenDTO.NetworkTypeDTO.ARBITRUM -> Token.NetworkType.ARBITRUM
|
||||
TokenDTO.NetworkTypeDTO.BINANCE -> Token.NetworkType.BINANCE
|
||||
TokenDTO.NetworkTypeDTO.CELO -> Token.NetworkType.CELO
|
||||
TokenDTO.NetworkTypeDTO.ETHEREUM -> Token.NetworkType.ETHEREUM
|
||||
TokenDTO.NetworkTypeDTO.ETHEREUM_GOERLI -> Token.NetworkType.ETHEREUM_GOERLI
|
||||
TokenDTO.NetworkTypeDTO.ETHEREUM_HOLESKY -> Token.NetworkType.ETHEREUM_HOLESKY
|
||||
TokenDTO.NetworkTypeDTO.FANTOM -> Token.NetworkType.FANTOM
|
||||
TokenDTO.NetworkTypeDTO.HARMONY -> Token.NetworkType.HARMONY
|
||||
TokenDTO.NetworkTypeDTO.OPTIMISM -> Token.NetworkType.OPTIMISM
|
||||
TokenDTO.NetworkTypeDTO.POLYGON -> Token.NetworkType.POLYGON
|
||||
TokenDTO.NetworkTypeDTO.GNOSIS -> Token.NetworkType.GNOSIS
|
||||
TokenDTO.NetworkTypeDTO.MOONRIVER -> Token.NetworkType.MOONRIVER
|
||||
TokenDTO.NetworkTypeDTO.OKC -> Token.NetworkType.OKC
|
||||
TokenDTO.NetworkTypeDTO.ZKSYNC -> Token.NetworkType.ZKSYNC
|
||||
TokenDTO.NetworkTypeDTO.VICTION -> Token.NetworkType.VICTION
|
||||
TokenDTO.NetworkTypeDTO.AGORIC -> Token.NetworkType.AGORIC
|
||||
TokenDTO.NetworkTypeDTO.AKASH -> Token.NetworkType.AKASH
|
||||
TokenDTO.NetworkTypeDTO.AXELAR -> Token.NetworkType.AXELAR
|
||||
TokenDTO.NetworkTypeDTO.BAND_PROTOCOL -> Token.NetworkType.BAND_PROTOCOL
|
||||
TokenDTO.NetworkTypeDTO.BITSONG -> Token.NetworkType.BITSONG
|
||||
TokenDTO.NetworkTypeDTO.CANTO -> Token.NetworkType.CANTO
|
||||
TokenDTO.NetworkTypeDTO.CHIHUAHUA -> Token.NetworkType.CHIHUAHUA
|
||||
TokenDTO.NetworkTypeDTO.COMDEX -> Token.NetworkType.COMDEX
|
||||
TokenDTO.NetworkTypeDTO.COREUM -> Token.NetworkType.COREUM
|
||||
TokenDTO.NetworkTypeDTO.COSMOS -> Token.NetworkType.COSMOS
|
||||
TokenDTO.NetworkTypeDTO.CRESCENT -> Token.NetworkType.CRESCENT
|
||||
TokenDTO.NetworkTypeDTO.CRONOS -> Token.NetworkType.CRONOS
|
||||
TokenDTO.NetworkTypeDTO.CUDOS -> Token.NetworkType.CUDOS
|
||||
TokenDTO.NetworkTypeDTO.DESMOS -> Token.NetworkType.DESMOS
|
||||
TokenDTO.NetworkTypeDTO.DYDX -> Token.NetworkType.DYDX
|
||||
TokenDTO.NetworkTypeDTO.EVMOS -> Token.NetworkType.EVMOS
|
||||
TokenDTO.NetworkTypeDTO.FETCH_AI -> Token.NetworkType.FETCH_AI
|
||||
TokenDTO.NetworkTypeDTO.GRAVITY_BRIDGE -> Token.NetworkType.GRAVITY_BRIDGE
|
||||
TokenDTO.NetworkTypeDTO.INJECTIVE -> Token.NetworkType.INJECTIVE
|
||||
TokenDTO.NetworkTypeDTO.IRISNET -> Token.NetworkType.IRISNET
|
||||
TokenDTO.NetworkTypeDTO.JUNO -> Token.NetworkType.JUNO
|
||||
TokenDTO.NetworkTypeDTO.KAVA -> Token.NetworkType.KAVA
|
||||
TokenDTO.NetworkTypeDTO.KI_NETWORK -> Token.NetworkType.KI_NETWORK
|
||||
TokenDTO.NetworkTypeDTO.MARS_PROTOCOL -> Token.NetworkType.MARS_PROTOCOL
|
||||
TokenDTO.NetworkTypeDTO.NYM -> Token.NetworkType.NYM
|
||||
TokenDTO.NetworkTypeDTO.OKEX_CHAIN -> Token.NetworkType.OKEX_CHAIN
|
||||
TokenDTO.NetworkTypeDTO.ONOMY -> Token.NetworkType.ONOMY
|
||||
TokenDTO.NetworkTypeDTO.OSMOSIS -> Token.NetworkType.OSMOSIS
|
||||
TokenDTO.NetworkTypeDTO.PERSISTENCE -> Token.NetworkType.PERSISTENCE
|
||||
TokenDTO.NetworkTypeDTO.QUICKSILVER -> Token.NetworkType.QUICKSILVER
|
||||
TokenDTO.NetworkTypeDTO.REGEN -> Token.NetworkType.REGEN
|
||||
TokenDTO.NetworkTypeDTO.SECRET -> Token.NetworkType.SECRET
|
||||
TokenDTO.NetworkTypeDTO.SENTINEL -> Token.NetworkType.SENTINEL
|
||||
TokenDTO.NetworkTypeDTO.SOMMELIER -> Token.NetworkType.SOMMELIER
|
||||
TokenDTO.NetworkTypeDTO.STAFI -> Token.NetworkType.STAFI
|
||||
TokenDTO.NetworkTypeDTO.STARGAZE -> Token.NetworkType.STARGAZE
|
||||
TokenDTO.NetworkTypeDTO.STRIDE -> Token.NetworkType.STRIDE
|
||||
TokenDTO.NetworkTypeDTO.TERITORI -> Token.NetworkType.TERITORI
|
||||
TokenDTO.NetworkTypeDTO.TGRADE -> Token.NetworkType.TGRADE
|
||||
TokenDTO.NetworkTypeDTO.UMEE -> Token.NetworkType.UMEE
|
||||
TokenDTO.NetworkTypeDTO.POLKADOT -> Token.NetworkType.POLKADOT
|
||||
TokenDTO.NetworkTypeDTO.KUSAMA -> Token.NetworkType.KUSAMA
|
||||
TokenDTO.NetworkTypeDTO.WESTEND -> Token.NetworkType.WESTEND
|
||||
TokenDTO.NetworkTypeDTO.BINANCEBEACON -> Token.NetworkType.BINANCEBEACON
|
||||
TokenDTO.NetworkTypeDTO.NEAR -> Token.NetworkType.NEAR
|
||||
TokenDTO.NetworkTypeDTO.SOLANA -> Token.NetworkType.SOLANA
|
||||
TokenDTO.NetworkTypeDTO.TEZOS -> Token.NetworkType.TEZOS
|
||||
TokenDTO.NetworkTypeDTO.TRON -> Token.NetworkType.TRON
|
||||
else -> Token.NetworkType.UNKNOWN
|
||||
}
|
||||
}
|
||||
|
||||
private fun convertArgs(argsDTO: YieldDTO.ArgsDTO): Yield.Args {
|
||||
return Yield.Args(
|
||||
enter = convertEnter(argsDTO.enter),
|
||||
|
|
@ -153,9 +68,9 @@ class YieldConverter : Converter<YieldDTO, Yield> {
|
|||
logoUri = metadataDTO.logoUri,
|
||||
description = metadataDTO.description,
|
||||
documentation = metadataDTO.documentation,
|
||||
gasFeeToken = convertToken(metadataDTO.gasFeeTokenDTO),
|
||||
token = convertToken(metadataDTO.tokenDTO),
|
||||
tokens = metadataDTO.tokensDTO.map { convertToken(it) },
|
||||
gasFeeToken = tokenConverter.convert(metadataDTO.gasFeeTokenDTO),
|
||||
token = tokenConverter.convert(metadataDTO.tokenDTO),
|
||||
tokens = metadataDTO.tokensDTO.map { tokenConverter.convert(it) },
|
||||
type = metadataDTO.type,
|
||||
rewardSchedule = metadataDTO.rewardSchedule,
|
||||
cooldownPeriod = convertPeriod(metadataDTO.cooldownPeriod),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
package com.tangem.data.staking.converters.action
|
||||
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionStatusDTO
|
||||
import com.tangem.domain.staking.model.action.StakingActionStatus
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
class ActionStatusConverter : Converter<StakingActionStatusDTO, StakingActionStatus> {
|
||||
override fun convert(value: StakingActionStatusDTO): StakingActionStatus {
|
||||
return when (value) {
|
||||
StakingActionStatusDTO.CANCELED -> StakingActionStatus.CANCELED
|
||||
StakingActionStatusDTO.CREATED -> StakingActionStatus.CREATED
|
||||
StakingActionStatusDTO.WAITING_FOR_NEXT -> StakingActionStatus.WAITING_FOR_NEXT
|
||||
StakingActionStatusDTO.PROCESSING -> StakingActionStatus.PROCESSING
|
||||
StakingActionStatusDTO.FAILED -> StakingActionStatus.FAILED
|
||||
StakingActionStatusDTO.SUCCESS -> StakingActionStatus.SUCCESS
|
||||
else -> StakingActionStatus.UNKNOWN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.tangem.data.staking.converters.action
|
||||
|
||||
import com.tangem.data.staking.converters.transaction.StakingTransactionConverter
|
||||
import com.tangem.datasource.api.stakekit.models.response.EnterActionResponse
|
||||
import com.tangem.domain.staking.model.action.EnterAction
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
class EnterActionResponseConverter(
|
||||
private val actionStatusConverter: ActionStatusConverter,
|
||||
private val stakingActionTypeConverter: StakingActionTypeConverter,
|
||||
private val transactionConverter: StakingTransactionConverter,
|
||||
) : Converter<EnterActionResponse, EnterAction> {
|
||||
|
||||
override fun convert(value: EnterActionResponse): EnterAction {
|
||||
return EnterAction(
|
||||
id = value.id,
|
||||
integrationId = value.integrationId,
|
||||
status = actionStatusConverter.convert(value.status),
|
||||
type = stakingActionTypeConverter.convert(value.type),
|
||||
currentStepIndex = value.currentStepIndex,
|
||||
amount = value.amount,
|
||||
validatorAddress = value.validatorAddress,
|
||||
validatorAddresses = value.validatorAddresses,
|
||||
transactions = value.transactions?.map(transactionConverter::convert),
|
||||
createdAt = value.createdAt,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package com.tangem.data.staking.converters.action
|
||||
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.action.StakingActionTypeDTO
|
||||
import com.tangem.domain.staking.model.action.StakingActionType
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
@Suppress("CyclomaticComplexMethod")
|
||||
class StakingActionTypeConverter : Converter<StakingActionTypeDTO, StakingActionType> {
|
||||
|
||||
override fun convert(value: StakingActionTypeDTO): StakingActionType {
|
||||
return when (value) {
|
||||
StakingActionTypeDTO.STAKE -> StakingActionType.STAKE
|
||||
StakingActionTypeDTO.UNSTAKE -> StakingActionType.UNSTAKE
|
||||
StakingActionTypeDTO.CLAIM_REWARDS -> StakingActionType.CLAIM_REWARDS
|
||||
StakingActionTypeDTO.RESTAKE_REWARDS -> StakingActionType.RESTAKE_REWARDS
|
||||
StakingActionTypeDTO.WITHDRAW -> StakingActionType.WITHDRAW
|
||||
StakingActionTypeDTO.RESTAKE -> StakingActionType.RESTAKE
|
||||
StakingActionTypeDTO.CLAIM_UNSTAKED -> StakingActionType.CLAIM_UNSTAKED
|
||||
StakingActionTypeDTO.UNLOCK_LOCKED -> StakingActionType.UNLOCK_LOCKED
|
||||
StakingActionTypeDTO.STAKE_LOCKED -> StakingActionType.STAKE_LOCKED
|
||||
StakingActionTypeDTO.VOTE -> StakingActionType.VOTE
|
||||
StakingActionTypeDTO.REVOKE -> StakingActionType.REVOKE
|
||||
StakingActionTypeDTO.VOTE_LOCKED -> StakingActionType.VOTE_LOCKED
|
||||
StakingActionTypeDTO.REVOTE -> StakingActionType.REVOTE
|
||||
StakingActionTypeDTO.REBOND -> StakingActionType.REBOND
|
||||
StakingActionTypeDTO.MIGRATE -> StakingActionType.MIGRATE
|
||||
StakingActionTypeDTO.UNKNOWN -> StakingActionType.UNKNOWN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.tangem.data.staking.converters.transaction
|
||||
|
||||
import com.tangem.data.staking.converters.TokenConverter
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingGasEstimateDTO
|
||||
import com.tangem.domain.staking.model.transaction.StakingGasEstimate
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
class GasEstimateConverter(
|
||||
private val tokenConverter: TokenConverter,
|
||||
) : Converter<StakingGasEstimateDTO, StakingGasEstimate> {
|
||||
|
||||
override fun convert(value: StakingGasEstimateDTO): StakingGasEstimate {
|
||||
return StakingGasEstimate(
|
||||
amount = value.amount,
|
||||
token = tokenConverter.convert(value.token),
|
||||
gasLimit = value.gasLimit,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package com.tangem.data.staking.converters.transaction
|
||||
|
||||
import com.tangem.data.staking.converters.StakingNetworkTypeConverter
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingTransactionDTO
|
||||
import com.tangem.domain.staking.model.transaction.StakingTransaction
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
class StakingTransactionConverter(
|
||||
private val networkTypeConverter: StakingNetworkTypeConverter,
|
||||
private val transactionStatusConverter: StakingTransactionStatusConverter,
|
||||
private val transactionTypeConverter: StakingTransactionTypeConverter,
|
||||
private val gasEstimateConverter: GasEstimateConverter,
|
||||
) : Converter<StakingTransactionDTO, StakingTransaction> {
|
||||
|
||||
override fun convert(value: StakingTransactionDTO): StakingTransaction {
|
||||
return StakingTransaction(
|
||||
id = value.id,
|
||||
network = networkTypeConverter.convert(value.network),
|
||||
status = transactionStatusConverter.convert(value.status),
|
||||
type = transactionTypeConverter.convert(value.type),
|
||||
hash = value.hash,
|
||||
signedTransaction = value.signedTransaction,
|
||||
unsignedTransaction = value.unsignedTransaction,
|
||||
stepIndex = value.stepIndex,
|
||||
error = value.error,
|
||||
gasEstimate = value.gasEstimate?.let { gasEstimateConverter.convert(it) },
|
||||
stakeId = value.stakeId,
|
||||
explorerUrl = value.explorerUrl,
|
||||
ledgerHwAppId = value.ledgerHwAppId,
|
||||
isMessage = value.isMessage,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.tangem.data.staking.converters.transaction
|
||||
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingTransactionStatusDTO
|
||||
import com.tangem.domain.staking.model.transaction.StakingTransactionStatus
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
class StakingTransactionStatusConverter : Converter<StakingTransactionStatusDTO, StakingTransactionStatus> {
|
||||
|
||||
override fun convert(value: StakingTransactionStatusDTO): StakingTransactionStatus {
|
||||
return when (value) {
|
||||
StakingTransactionStatusDTO.NOT_FOUND -> StakingTransactionStatus.NOT_FOUND
|
||||
StakingTransactionStatusDTO.CREATED -> StakingTransactionStatus.CREATED
|
||||
StakingTransactionStatusDTO.BLOCKED -> StakingTransactionStatus.BLOCKED
|
||||
StakingTransactionStatusDTO.WAITING_FOR_SIGNATURE -> StakingTransactionStatus.WAITING_FOR_SIGNATURE
|
||||
StakingTransactionStatusDTO.SIGNED -> StakingTransactionStatus.SIGNED
|
||||
StakingTransactionStatusDTO.BROADCASTED -> StakingTransactionStatus.BROADCASTED
|
||||
StakingTransactionStatusDTO.PENDING -> StakingTransactionStatus.PENDING
|
||||
StakingTransactionStatusDTO.CONFIRMED -> StakingTransactionStatus.CONFIRMED
|
||||
StakingTransactionStatusDTO.FAILED -> StakingTransactionStatus.FAILED
|
||||
StakingTransactionStatusDTO.SKIPPED -> StakingTransactionStatus.SKIPPED
|
||||
StakingTransactionStatusDTO.UNKNOWN -> StakingTransactionStatus.UNKNOWN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package com.tangem.data.staking.converters.transaction
|
||||
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.transaction.StakingTransactionTypeDTO
|
||||
import com.tangem.domain.staking.model.transaction.StakingTransactionType
|
||||
import com.tangem.utils.converter.Converter
|
||||
|
||||
@Suppress("CyclomaticComplexMethod")
|
||||
class StakingTransactionTypeConverter : Converter<StakingTransactionTypeDTO, StakingTransactionType> {
|
||||
|
||||
override fun convert(value: StakingTransactionTypeDTO): StakingTransactionType {
|
||||
return when (value) {
|
||||
StakingTransactionTypeDTO.SWAP -> StakingTransactionType.SWAP
|
||||
StakingTransactionTypeDTO.DEPOSIT -> StakingTransactionType.DEPOSIT
|
||||
StakingTransactionTypeDTO.APPROVAL -> StakingTransactionType.APPROVAL
|
||||
StakingTransactionTypeDTO.STAKE -> StakingTransactionType.STAKE
|
||||
StakingTransactionTypeDTO.CLAIM_UNSTAKED -> StakingTransactionType.CLAIM_UNSTAKED
|
||||
StakingTransactionTypeDTO.CLAIM_REWARDS -> StakingTransactionType.CLAIM_REWARDS
|
||||
StakingTransactionTypeDTO.RESTAKE_REWARDS -> StakingTransactionType.RESTAKE_REWARDS
|
||||
StakingTransactionTypeDTO.UNSTAKE -> StakingTransactionType.UNSTAKE
|
||||
StakingTransactionTypeDTO.SPLIT -> StakingTransactionType.SPLIT
|
||||
StakingTransactionTypeDTO.MERGE -> StakingTransactionType.MERGE
|
||||
StakingTransactionTypeDTO.LOCK -> StakingTransactionType.LOCK
|
||||
StakingTransactionTypeDTO.UNLOCK -> StakingTransactionType.UNLOCK
|
||||
StakingTransactionTypeDTO.SUPPLY -> StakingTransactionType.SUPPLY
|
||||
StakingTransactionTypeDTO.BRIDGE -> StakingTransactionType.BRIDGE
|
||||
StakingTransactionTypeDTO.VOTE -> StakingTransactionType.VOTE
|
||||
StakingTransactionTypeDTO.REVOKE -> StakingTransactionType.REVOKE
|
||||
StakingTransactionTypeDTO.RESTAKE -> StakingTransactionType.RESTAKE
|
||||
StakingTransactionTypeDTO.REBOND -> StakingTransactionType.REBOND
|
||||
StakingTransactionTypeDTO.WITHDRAW -> StakingTransactionType.WITHDRAW
|
||||
StakingTransactionTypeDTO.CREATE_ACCOUNT -> StakingTransactionType.CREATE_ACCOUNT
|
||||
StakingTransactionTypeDTO.REVEAL -> StakingTransactionType.REVEAL
|
||||
StakingTransactionTypeDTO.MIGRATE -> StakingTransactionType.MIGRATE
|
||||
StakingTransactionTypeDTO.UTXO_P_TO_C_IMPORT -> StakingTransactionType.UTXO_P_TO_C_IMPORT
|
||||
StakingTransactionTypeDTO.UTXO_C_TO_P_IMPORT -> StakingTransactionType.UTXO_C_TO_P_IMPORT
|
||||
StakingTransactionTypeDTO.UNFREEZE_LEGACY -> StakingTransactionType.UNFREEZE_LEGACY
|
||||
StakingTransactionTypeDTO.UNFREEZE_LEGACY_BANDWIDTH -> StakingTransactionType.UNFREEZE_LEGACY_BANDWIDTH
|
||||
StakingTransactionTypeDTO.UNFREEZE_LEGACY_ENERGY -> StakingTransactionType.UNFREEZE_LEGACY_ENERGY
|
||||
StakingTransactionTypeDTO.UNFREEZE_BANDWIDTH -> StakingTransactionType.UNFREEZE_BANDWIDTH
|
||||
StakingTransactionTypeDTO.UNFREEZE_ENERGY -> StakingTransactionType.UNFREEZE_ENERGY
|
||||
StakingTransactionTypeDTO.FREEZE_BANDWIDTH -> StakingTransactionType.FREEZE_BANDWIDTH
|
||||
StakingTransactionTypeDTO.FREEZE_ENERGY -> StakingTransactionType.FREEZE_ENERGY
|
||||
StakingTransactionTypeDTO.UNDELEGATE_BANDWIDTH -> StakingTransactionType.UNDELEGATE_BANDWIDTH
|
||||
StakingTransactionTypeDTO.UNDELEGATE_ENERGY -> StakingTransactionType.UNDELEGATE_ENERGY
|
||||
StakingTransactionTypeDTO.P2P_NODE_REQUEST -> StakingTransactionType.P2P_NODE_REQUEST
|
||||
StakingTransactionTypeDTO.LUGANODES_PROVISION -> StakingTransactionType.LUGANODES_PROVISION
|
||||
StakingTransactionTypeDTO.LUGANODES_EXIT_REQUEST -> StakingTransactionType.LUGANODES_EXIT_REQUEST
|
||||
StakingTransactionTypeDTO.INFSTONES_PROVISION -> StakingTransactionType.INFSTONES_PROVISION
|
||||
StakingTransactionTypeDTO.INFSTONES_EXIT_REQUEST -> StakingTransactionType.INFSTONES_EXIT_REQUEST
|
||||
StakingTransactionTypeDTO.INFSTONES_CLAIM_REQUEST -> StakingTransactionType.INFSTONES_CLAIM_REQUEST
|
||||
StakingTransactionTypeDTO.UNKNOWN -> StakingTransactionType.UNKNOWN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -8,4 +8,5 @@ dependencies {
|
|||
implementation(projects.domain.core)
|
||||
|
||||
implementation(deps.kotlin.serialization)
|
||||
implementation(deps.jodatime)
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
package com.tangem.domain.staking.model
|
||||
|
||||
enum class NetworkType {
|
||||
AVALANCHE_C,
|
||||
AVALANCHE_ATOMIC,
|
||||
AVALANCHE_P,
|
||||
ARBITRUM,
|
||||
BINANCE,
|
||||
CELO,
|
||||
ETHEREUM,
|
||||
ETHEREUM_GOERLI,
|
||||
ETHEREUM_HOLESKY,
|
||||
FANTOM,
|
||||
HARMONY,
|
||||
OPTIMISM,
|
||||
POLYGON,
|
||||
GNOSIS,
|
||||
MOONRIVER,
|
||||
OKC,
|
||||
ZKSYNC,
|
||||
VICTION,
|
||||
AGORIC,
|
||||
AKASH,
|
||||
AXELAR,
|
||||
BAND_PROTOCOL,
|
||||
BITSONG,
|
||||
CANTO,
|
||||
CHIHUAHUA,
|
||||
COMDEX,
|
||||
COREUM,
|
||||
COSMOS,
|
||||
CRESCENT,
|
||||
CRONOS,
|
||||
CUDOS,
|
||||
DESMOS,
|
||||
DYDX,
|
||||
EVMOS,
|
||||
FETCH_AI,
|
||||
GRAVITY_BRIDGE,
|
||||
INJECTIVE,
|
||||
IRISNET,
|
||||
JUNO,
|
||||
KAVA,
|
||||
KI_NETWORK,
|
||||
MARS_PROTOCOL,
|
||||
NYM,
|
||||
OKEX_CHAIN,
|
||||
ONOMY,
|
||||
OSMOSIS,
|
||||
PERSISTENCE,
|
||||
QUICKSILVER,
|
||||
REGEN,
|
||||
SECRET,
|
||||
SENTINEL,
|
||||
SOMMELIER,
|
||||
STAFI,
|
||||
STARGAZE,
|
||||
STRIDE,
|
||||
TERITORI,
|
||||
TGRADE,
|
||||
UMEE,
|
||||
POLKADOT,
|
||||
KUSAMA,
|
||||
WESTEND,
|
||||
BINANCEBEACON,
|
||||
NEAR,
|
||||
SOLANA,
|
||||
TEZOS,
|
||||
TRON,
|
||||
UNKNOWN,
|
||||
}
|
||||
|
|
@ -107,77 +107,7 @@ data class Token(
|
|||
val coinGeckoId: String?,
|
||||
val logoURI: String?,
|
||||
val isPoints: Boolean?,
|
||||
) {
|
||||
enum class NetworkType {
|
||||
AVALANCHE_C,
|
||||
AVALANCHE_ATOMIC,
|
||||
AVALANCHE_P,
|
||||
ARBITRUM,
|
||||
BINANCE,
|
||||
CELO,
|
||||
ETHEREUM,
|
||||
ETHEREUM_GOERLI,
|
||||
ETHEREUM_HOLESKY,
|
||||
FANTOM,
|
||||
HARMONY,
|
||||
OPTIMISM,
|
||||
POLYGON,
|
||||
GNOSIS,
|
||||
MOONRIVER,
|
||||
OKC,
|
||||
ZKSYNC,
|
||||
VICTION,
|
||||
AGORIC,
|
||||
AKASH,
|
||||
AXELAR,
|
||||
BAND_PROTOCOL,
|
||||
BITSONG,
|
||||
CANTO,
|
||||
CHIHUAHUA,
|
||||
COMDEX,
|
||||
COREUM,
|
||||
COSMOS,
|
||||
CRESCENT,
|
||||
CRONOS,
|
||||
CUDOS,
|
||||
DESMOS,
|
||||
DYDX,
|
||||
EVMOS,
|
||||
FETCH_AI,
|
||||
GRAVITY_BRIDGE,
|
||||
INJECTIVE,
|
||||
IRISNET,
|
||||
JUNO,
|
||||
KAVA,
|
||||
KI_NETWORK,
|
||||
MARS_PROTOCOL,
|
||||
NYM,
|
||||
OKEX_CHAIN,
|
||||
ONOMY,
|
||||
OSMOSIS,
|
||||
PERSISTENCE,
|
||||
QUICKSILVER,
|
||||
REGEN,
|
||||
SECRET,
|
||||
SENTINEL,
|
||||
SOMMELIER,
|
||||
STAFI,
|
||||
STARGAZE,
|
||||
STRIDE,
|
||||
TERITORI,
|
||||
TGRADE,
|
||||
UMEE,
|
||||
POLKADOT,
|
||||
KUSAMA,
|
||||
WESTEND,
|
||||
BINANCEBEACON,
|
||||
NEAR,
|
||||
SOLANA,
|
||||
TEZOS,
|
||||
TRON,
|
||||
UNKNOWN,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class AddressArgument(
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
package com.tangem.domain.staking.model.action
|
||||
|
||||
import com.tangem.domain.staking.model.transaction.StakingTransaction
|
||||
import org.joda.time.DateTime
|
||||
import java.math.BigDecimal
|
||||
|
||||
data class EnterAction(
|
||||
val id: String,
|
||||
val integrationId: String,
|
||||
val status: StakingActionStatus,
|
||||
val type: StakingActionType,
|
||||
val currentStepIndex: Int,
|
||||
val amount: BigDecimal,
|
||||
val validatorAddress: String?,
|
||||
val validatorAddresses: List<String>?,
|
||||
val transactions: List<StakingTransaction>?,
|
||||
val createdAt: DateTime,
|
||||
)
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package com.tangem.domain.staking.model.action
|
||||
|
||||
enum class StakingActionStatus {
|
||||
CANCELED,
|
||||
CREATED,
|
||||
WAITING_FOR_NEXT,
|
||||
PROCESSING,
|
||||
FAILED,
|
||||
SUCCESS,
|
||||
UNKNOWN,
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package com.tangem.domain.staking.model.action
|
||||
|
||||
enum class StakingActionType {
|
||||
STAKE,
|
||||
UNSTAKE,
|
||||
CLAIM_REWARDS,
|
||||
RESTAKE_REWARDS,
|
||||
WITHDRAW,
|
||||
RESTAKE,
|
||||
CLAIM_UNSTAKED,
|
||||
UNLOCK_LOCKED,
|
||||
STAKE_LOCKED,
|
||||
VOTE,
|
||||
REVOKE,
|
||||
VOTE_LOCKED,
|
||||
REVOTE,
|
||||
REBOND,
|
||||
MIGRATE,
|
||||
UNKNOWN,
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package com.tangem.domain.staking.model.transaction
|
||||
|
||||
import com.tangem.domain.staking.model.Token
|
||||
import java.math.BigDecimal
|
||||
|
||||
data class StakingGasEstimate(
|
||||
val amount: BigDecimal,
|
||||
val token: Token,
|
||||
val gasLimit: BigDecimal,
|
||||
)
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package com.tangem.domain.staking.model.transaction
|
||||
|
||||
import com.tangem.domain.staking.model.NetworkType
|
||||
|
||||
data class StakingTransaction(
|
||||
val id: String,
|
||||
val network: NetworkType,
|
||||
val status: StakingTransactionStatus,
|
||||
val type: StakingTransactionType,
|
||||
val hash: String?,
|
||||
val signedTransaction: String?,
|
||||
val unsignedTransaction: String?,
|
||||
val stepIndex: Int,
|
||||
val error: String?,
|
||||
val gasEstimate: StakingGasEstimate?,
|
||||
val stakeId: String?,
|
||||
val explorerUrl: String?,
|
||||
val ledgerHwAppId: String?,
|
||||
val isMessage: Boolean,
|
||||
)
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package com.tangem.domain.staking.model.transaction
|
||||
|
||||
enum class StakingTransactionStatus {
|
||||
NOT_FOUND,
|
||||
CREATED,
|
||||
BLOCKED,
|
||||
WAITING_FOR_SIGNATURE,
|
||||
SIGNED,
|
||||
BROADCASTED,
|
||||
PENDING,
|
||||
CONFIRMED,
|
||||
FAILED,
|
||||
SKIPPED,
|
||||
UNKNOWN,
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.tangem.domain.staking.model.transaction
|
||||
|
||||
enum class StakingTransactionType {
|
||||
SWAP,
|
||||
DEPOSIT,
|
||||
APPROVAL,
|
||||
STAKE,
|
||||
CLAIM_UNSTAKED,
|
||||
CLAIM_REWARDS,
|
||||
RESTAKE_REWARDS,
|
||||
UNSTAKE,
|
||||
SPLIT,
|
||||
MERGE,
|
||||
LOCK,
|
||||
UNLOCK,
|
||||
SUPPLY,
|
||||
BRIDGE,
|
||||
VOTE,
|
||||
REVOKE,
|
||||
RESTAKE,
|
||||
REBOND,
|
||||
WITHDRAW,
|
||||
CREATE_ACCOUNT,
|
||||
REVEAL,
|
||||
MIGRATE,
|
||||
UTXO_P_TO_C_IMPORT,
|
||||
UTXO_C_TO_P_IMPORT,
|
||||
UNFREEZE_LEGACY,
|
||||
UNFREEZE_LEGACY_BANDWIDTH,
|
||||
UNFREEZE_LEGACY_ENERGY,
|
||||
UNFREEZE_BANDWIDTH,
|
||||
UNFREEZE_ENERGY,
|
||||
FREEZE_BANDWIDTH,
|
||||
FREEZE_ENERGY,
|
||||
UNDELEGATE_BANDWIDTH,
|
||||
UNDELEGATE_ENERGY,
|
||||
P2P_NODE_REQUEST,
|
||||
LUGANODES_PROVISION,
|
||||
LUGANODES_EXIT_REQUEST,
|
||||
INFSTONES_PROVISION,
|
||||
INFSTONES_EXIT_REQUEST,
|
||||
INFSTONES_CLAIM_REQUEST,
|
||||
UNKNOWN,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue