diff --git a/blockchain-demo/src/main/java/com/tangem/blockchain_demo/BlockchainDemoActivity.kt b/blockchain-demo/src/main/java/com/tangem/blockchain_demo/BlockchainDemoActivity.kt index ce5a7efb8d..bc9a9e7b61 100644 --- a/blockchain-demo/src/main/java/com/tangem/blockchain_demo/BlockchainDemoActivity.kt +++ b/blockchain-demo/src/main/java/com/tangem/blockchain_demo/BlockchainDemoActivity.kt @@ -7,9 +7,9 @@ import androidx.appcompat.app.AppCompatActivity import com.tangem.SessionError import com.tangem.TangemSdk import com.tangem.blockchain.common.* -import com.tangem.blockchain.common.extensions.Result -import com.tangem.blockchain.common.extensions.Signer -import com.tangem.blockchain.common.extensions.SimpleResult +import com.tangem.blockchain.extensions.Result +import com.tangem.blockchain.extensions.Signer +import com.tangem.blockchain.extensions.SimpleResult import com.tangem.blockchain_demo.databinding.ActivityBlockchainDemoBinding import com.tangem.commands.Card import com.tangem.common.CompletionResult @@ -78,9 +78,9 @@ class BlockchainDemoActivity : AppCompatActivity() { walletManager.update() withContext(Dispatchers.Main) { binding.tvBalance.text = - "${walletManager.wallet.balances[AmountType.Coin]?.value?.toPlainString() - ?: "error"} ${walletManager.blockchain.currency}" - val token = walletManager.wallet.balances[AmountType.Token] + "${walletManager.wallet.amounts[AmountType.Coin]?.value?.toPlainString() + ?: "error"} ${walletManager.wallet.blockchain.currency}" + val token = walletManager.wallet.amounts[AmountType.Token] if (token != null) { binding.tvBalance.text = token.value?.toPlainString() + " " + token.currencySymbol binding.etSumToSend.text = Editable.Factory.getInstance().newEditable( @@ -89,7 +89,7 @@ class BlockchainDemoActivity : AppCompatActivity() { } else { binding.etSumToSend.text = Editable.Factory.getInstance().newEditable( - walletManager.wallet.balances[AmountType.Coin]?.value?.toPlainString() + walletManager.wallet.amounts[AmountType.Coin]?.value?.toPlainString() ) } binding.btnCheckFee.isEnabled = true @@ -107,9 +107,9 @@ class BlockchainDemoActivity : AppCompatActivity() { } scope.launch { - val feeResult = (walletManager as FeeProvider).getFee( - walletManager.wallet.balances[AmountType.Token] - ?: walletManager.wallet.balances[AmountType.Coin]!!, + val feeResult = (walletManager as TransactionSender).getFee( + walletManager.wallet.amounts[AmountType.Token] + ?: walletManager.wallet.amounts[AmountType.Coin]!!, binding.etReceiverAddress.text.toString()) withContext(Dispatchers.Main) { when (feeResult) { @@ -154,17 +154,17 @@ class BlockchainDemoActivity : AppCompatActivity() { } private fun formTransactionData(): TransactionData { - val amount = if (walletManager.wallet.balances[AmountType.Token] != null) { - walletManager.wallet.balances[AmountType.Token]!! + val amount = if (walletManager.wallet.amounts[AmountType.Token] != null) { + walletManager.wallet.amounts[AmountType.Token]!! } else { - walletManager.wallet.balances[AmountType.Coin]!!.copy( + walletManager.wallet.amounts[AmountType.Coin]!!.copy( value = binding.etSumToSend.text.toString().toBigDecimal() - fee ) } return TransactionData( amount, - walletManager.wallet.balances[AmountType.Coin]!!.copy(value = fee), - walletManager.wallet.balances[AmountType.Coin]!!.address!!, + walletManager.wallet.amounts[AmountType.Coin]!!.copy(value = fee), + walletManager.wallet.amounts[AmountType.Coin]!!.address!!, binding.etReceiverAddress.text.toString() ) } diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/BinanceAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/binance/BinanceAddress.kt deleted file mode 100644 index f0634cb9fd..0000000000 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/BinanceAddress.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.tangem.blockchain.binance - -import com.tangem.blockchain.binance.client.encoding.Crypto -import com.tangem.common.extensions.calculateRipemd160 -import com.tangem.common.extensions.calculateSha256 -import com.tangem.common.extensions.toCompressedPublicKey -import org.bitcoinj.core.Bech32 - -class BinanceAddressFactory { - companion object { - fun makeAddress(walletPublicKey: ByteArray, testNet: Boolean = false): String { - val publicKeyHash = walletPublicKey.toCompressedPublicKey().calculateSha256().calculateRipemd160() - return if (testNet) { - Bech32.encode("tbnb", Crypto.convertBits(publicKeyHash, 0, publicKeyHash.size, 8, 5, false)) - } else { - Bech32.encode("bnb", Crypto.convertBits(publicKeyHash, 0, publicKeyHash.size, 8, 5, false)) - } - } - } -} - -class BinanceAddressValidator { - companion object { - fun validate(address: String, testNet: Boolean = false): Boolean { - return try { - Crypto.decodeAddress(address) - if (testNet) { - address.startsWith("tbnb1") - } else { - address.startsWith("bnb1") - } - } catch (exception: Exception) { - false - } - } - } -} \ No newline at end of file diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/BinanceDexTransactionMessage.java b/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/BinanceDexTransactionMessage.java deleted file mode 100644 index cd17d401db..0000000000 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/BinanceDexTransactionMessage.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.tangem.blockchain.binance.client.encoding.message; - -public interface BinanceDexTransactionMessage { -} diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceAddress.kt new file mode 100644 index 0000000000..f531bf5519 --- /dev/null +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceAddress.kt @@ -0,0 +1,45 @@ +package com.tangem.blockchain.blockchains.binance + +import com.tangem.blockchain.blockchains.binance.client.encoding.Crypto +import com.tangem.blockchain.common.AddressService +import com.tangem.common.extensions.calculateRipemd160 +import com.tangem.common.extensions.calculateSha256 +import com.tangem.common.extensions.toCompressedPublicKey +import org.bitcoinj.core.Bech32 + +class BinanceAddressService(private val testNet: Boolean = false) : AddressService { + override fun makeAddress(walletPublicKey: ByteArray): String { + val publicKeyHash = walletPublicKey.toCompressedPublicKey().calculateSha256().calculateRipemd160() + return if (testNet) { + Bech32.encode("tbnb", Crypto.convertBits(publicKeyHash, 0, + publicKeyHash.size, 8, 5, false) + ) + } else { + Bech32.encode("bnb", Crypto.convertBits(publicKeyHash, 0, + publicKeyHash.size, 8, 5, false) + ) + } + } + + override fun validate(address: String): Boolean { + return try { + Crypto.decodeAddress(address) + if (testNet) { + address.startsWith("tbnb1") + } else { + address.startsWith("bnb1") + } + } catch (exception: Exception) { + false + } + } +} + +enum class BinanceChain(val value: String) { + Nile("Binance-Chain-Nile"), + Tigris("Binance-Chain-Tigris"); + + companion object { + fun getChain(testNet: Boolean): BinanceChain = if (testNet) Nile else Tigris + } +} \ No newline at end of file diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/BinanceTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceTransactionBuilder.kt similarity index 61% rename from blockchain/src/main/java/com/tangem/blockchain/binance/BinanceTransactionBuilder.kt rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceTransactionBuilder.kt index d9f770f25e..9de779d162 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/BinanceTransactionBuilder.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceTransactionBuilder.kt @@ -1,12 +1,11 @@ -package com.tangem.blockchain.binance +package com.tangem.blockchain.blockchains.binance -import com.tangem.blockchain.binance.client.BinanceDexApiClientFactory -import com.tangem.blockchain.binance.client.BinanceDexEnvironment -import com.tangem.blockchain.binance.client.domain.broadcast.TransactionOption -import com.tangem.blockchain.binance.client.domain.broadcast.Transfer -import com.tangem.blockchain.binance.client.encoding.message.MessageType -import com.tangem.blockchain.binance.client.encoding.message.TransactionRequestAssemblerExtSign -import com.tangem.blockchain.binance.client.encoding.message.TransferMessage +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiRestClient +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TransactionOption +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.Transfer +import com.tangem.blockchain.blockchains.binance.client.encoding.message.MessageType +import com.tangem.blockchain.blockchains.binance.client.encoding.message.TransactionRequestAssemblerExtSign +import com.tangem.blockchain.blockchains.binance.client.encoding.message.TransferMessage import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.TransactionData import com.tangem.common.extensions.calculateSha256 @@ -15,17 +14,17 @@ import org.bitcoinj.core.ECKey import org.bitcoinj.core.Utils import java.math.BigInteger -class BinanceTransactionBuilder(publicKey: ByteArray, isTestNet: Boolean) { - val chainId = if (isTestNet) "Binance-Chain-Nile" else "Binance-Chain-Tigris" - val prefixedPubKey = MessageType.PubKey.typePrefixBytes + 33.toByte() + publicKey.toCompressedPublicKey() - val client = BinanceDexApiClientFactory.newInstance().newRestClient( - if (isTestNet) BinanceDexEnvironment.PROD.baseUrl else BinanceDexEnvironment.TEST_NET.baseUrl - ) - +class BinanceTransactionBuilder( + publicKey: ByteArray, private val client: BinanceDexApiRestClient, isTestNet: Boolean = false +) { var accountNumber: Long? = null var sequence: Long? = null - var transactionAssembler: TransactionRequestAssemblerExtSign? = null - var transferMessage: TransferMessage? = null + + private val chainId = BinanceChain.getChain(isTestNet).value + private val prefixedPubKey = MessageType.PubKey.typePrefixBytes + 33.toByte() + publicKey.toCompressedPublicKey() + + private var transactionAssembler: TransactionRequestAssemblerExtSign? = null + private var transferMessage: TransferMessage? = null fun buildToSign(transactionData: TransactionData): ByteArray { val transfer = Transfer() @@ -33,7 +32,7 @@ class BinanceTransactionBuilder(publicKey: ByteArray, isTestNet: Boolean) { transfer.fromAddress = transactionData.sourceAddress transfer.toAddress = transactionData.destinationAddress transfer.amount = transactionData.amount.value!! - .setScale(Blockchain.Binance.decimals.toInt()).toPlainString() + .setScale(Blockchain.Binance.decimals()).toPlainString() val options = TransactionOption.DEFAULT_INSTANCE diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/BinanceWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceWalletManager.kt similarity index 62% rename from blockchain/src/main/java/com/tangem/blockchain/binance/BinanceWalletManager.kt rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceWalletManager.kt index 1ecbc6a3a6..956c22f537 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/BinanceWalletManager.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/BinanceWalletManager.kt @@ -1,30 +1,24 @@ -package com.tangem.blockchain.binance +package com.tangem.blockchain.blockchains.binance import android.util.Log -import com.tangem.blockchain.binance.network.BinanceInfoResponse -import com.tangem.blockchain.binance.network.BinanceNetworkManager +import com.tangem.blockchain.blockchains.binance.network.BinanceInfoResponse +import com.tangem.blockchain.blockchains.binance.network.BinanceNetworkManager import com.tangem.blockchain.common.* -import com.tangem.blockchain.common.extensions.Result -import com.tangem.blockchain.common.extensions.SimpleResult -import com.tangem.blockchain.wallets.CurrencyWallet +import com.tangem.blockchain.extensions.Result +import com.tangem.blockchain.extensions.SimpleResult import com.tangem.common.CompletionResult class BinanceWalletManager( - private val cardId: String, - walletPublicKey: ByteArray, - override var wallet: CurrencyWallet, - isTestNet: Boolean = false -) : WalletManager, - TransactionSender, - FeeProvider { + cardId: String, + wallet: Wallet, + private val transactionBuilder: BinanceTransactionBuilder, + private val networkManager: BinanceNetworkManager +) : WalletManager(cardId, wallet), TransactionSender { - override val blockchain = if (isTestNet) Blockchain.BinanceTestnet else Blockchain.Binance - private val address = blockchain.makeAddress(walletPublicKey) - private val transactionBuilder = BinanceTransactionBuilder(walletPublicKey, isTestNet) - private val networkManager = BinanceNetworkManager(isTestNet) + private val blockchain = wallet.blockchain override suspend fun update() { - val result = networkManager.getInfo(address) + val result = networkManager.getInfo(wallet.address) when (result) { is Result.Success -> updateWallet(result.data) is Result.Failure -> updateError(result.error) @@ -33,7 +27,7 @@ class BinanceWalletManager( private fun updateWallet(response: BinanceInfoResponse) { Log.d(this::class.java.simpleName, "Balance is ${response.balance}") - wallet.balances[AmountType.Coin]?.value = response.balance + wallet.amounts[AmountType.Coin]?.value = response.balance transactionBuilder.accountNumber = response.accountNumber transactionBuilder.sequence = response.sequence diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApi.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApi.java similarity index 71% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApi.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApi.java index a7fdf9f46a..41b15a0fb2 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApi.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApi.java @@ -1,13 +1,31 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; + +import com.tangem.blockchain.blockchains.binance.client.domain.Account; +import com.tangem.blockchain.blockchains.binance.client.domain.AccountSequence; +import com.tangem.blockchain.blockchains.binance.client.domain.Candlestick; +import com.tangem.blockchain.blockchains.binance.client.domain.Infos; +import com.tangem.blockchain.blockchains.binance.client.domain.Market; +import com.tangem.blockchain.blockchains.binance.client.domain.Order; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderBook; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderList; +import com.tangem.blockchain.blockchains.binance.client.domain.Peer; +import com.tangem.blockchain.blockchains.binance.client.domain.TickerStatistics; +import com.tangem.blockchain.blockchains.binance.client.domain.Time; +import com.tangem.blockchain.blockchains.binance.client.domain.Token; +import com.tangem.blockchain.blockchains.binance.client.domain.TradePage; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionMetadata; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionPage; +import com.tangem.blockchain.blockchains.binance.client.domain.Validators; import java.util.List; -import com.tangem.blockchain.binance.client.domain.*; import okhttp3.RequestBody; import retrofit2.Call; -import retrofit2.http.*; - -import java.util.List; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Path; +import retrofit2.http.Query; public interface BinanceDexApi { @GET("/api/v1/time") diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiAsyncRestClient.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiAsyncRestClient.java similarity index 55% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiAsyncRestClient.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiAsyncRestClient.java index cc2ca23f34..45df9b1ade 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiAsyncRestClient.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiAsyncRestClient.java @@ -1,10 +1,26 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; -import com.tangem.blockchain.binance.client.domain.*; -import com.tangem.blockchain.binance.client.domain.request.ClosedOrdersRequest; -import com.tangem.blockchain.binance.client.domain.request.OpenOrdersRequest; -import com.tangem.blockchain.binance.client.domain.request.TradesRequest; -import com.tangem.blockchain.binance.client.domain.request.TransactionsRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.Account; +import com.tangem.blockchain.blockchains.binance.client.domain.AccountSequence; +import com.tangem.blockchain.blockchains.binance.client.domain.Candlestick; +import com.tangem.blockchain.blockchains.binance.client.domain.CandlestickInterval; +import com.tangem.blockchain.blockchains.binance.client.domain.Infos; +import com.tangem.blockchain.blockchains.binance.client.domain.Market; +import com.tangem.blockchain.blockchains.binance.client.domain.Order; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderBook; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderList; +import com.tangem.blockchain.blockchains.binance.client.domain.Peer; +import com.tangem.blockchain.blockchains.binance.client.domain.TickerStatistics; +import com.tangem.blockchain.blockchains.binance.client.domain.Time; +import com.tangem.blockchain.blockchains.binance.client.domain.Token; +import com.tangem.blockchain.blockchains.binance.client.domain.TradePage; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionMetadata; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionPage; +import com.tangem.blockchain.blockchains.binance.client.domain.Validators; +import com.tangem.blockchain.blockchains.binance.client.domain.request.ClosedOrdersRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.OpenOrdersRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.TradesRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.TransactionsRequest; import java.util.List; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiCallback.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiCallback.java similarity index 91% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiCallback.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiCallback.java index 33e2bba139..a776443079 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiCallback.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiCallback.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; /** * BinanceDexApiCallback is a functional interface used together with the BinanceApiAsyncClient to provide a non-blocking REST client. diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiCallbackAdapter.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiCallbackAdapter.java similarity index 90% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiCallbackAdapter.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiCallbackAdapter.java index e96fc66946..cf12dcbf6f 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiCallbackAdapter.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiCallbackAdapter.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; import java.io.IOException; @@ -6,7 +6,7 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -import static com.tangem.blockchain.binance.client.BinanceDexApiClientGenerator.getBinanceApiError; +import static com.tangem.blockchain.blockchains.binance.client.BinanceDexApiClientGenerator.getBinanceApiError; /** * An adapter/wrapper which transforms a Callback from Retrofit into a BinanceDexApiCallback which is exposed to the client. diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiClientFactory.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiClientFactory.java similarity index 75% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiClientFactory.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiClientFactory.java index 8cab3bb433..56b6ab6826 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiClientFactory.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiClientFactory.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; -import com.tangem.blockchain.binance.client.impl.BinanceDexApiAsyncRestClientImpl; -import com.tangem.blockchain.binance.client.impl.BinanceDexApiRestClientImpl; +import com.tangem.blockchain.blockchains.binance.client.impl.BinanceDexApiAsyncRestClientImpl; +import com.tangem.blockchain.blockchains.binance.client.impl.BinanceDexApiRestClientImpl; public class BinanceDexApiClientFactory { private BinanceDexApiClientFactory() { diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiClientGenerator.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiClientGenerator.java similarity index 97% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiClientGenerator.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiClientGenerator.java index 1313e621d3..5b67b2f3e4 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiClientGenerator.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiClientGenerator.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.joda.JodaModule; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiError.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiError.java similarity index 93% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiError.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiError.java index 5aa7b1826c..e9a2cc6ee0 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiError.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiError.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiException.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiException.java similarity index 92% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiException.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiException.java index 9f423dbbb4..dd17402aea 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiException.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiException.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; public class BinanceDexApiException extends RuntimeException { diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiRestClient.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiRestClient.java similarity index 51% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiRestClient.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiRestClient.java index 48fa5f1410..c5e8d08eea 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexApiRestClient.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexApiRestClient.java @@ -1,34 +1,34 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; -import com.tangem.blockchain.binance.BinanceAccountData; -import com.tangem.blockchain.binance.client.domain.Account; -import com.tangem.blockchain.binance.client.domain.AccountSequence; -import com.tangem.blockchain.binance.client.domain.Candlestick; -import com.tangem.blockchain.binance.client.domain.CandlestickInterval; -import com.tangem.blockchain.binance.client.domain.Infos; -import com.tangem.blockchain.binance.client.domain.Market; -import com.tangem.blockchain.binance.client.domain.Order; -import com.tangem.blockchain.binance.client.domain.OrderBook; -import com.tangem.blockchain.binance.client.domain.OrderList; -import com.tangem.blockchain.binance.client.domain.Peer; -import com.tangem.blockchain.binance.client.domain.TickerStatistics; -import com.tangem.blockchain.binance.client.domain.Time; -import com.tangem.blockchain.binance.client.domain.Token; -import com.tangem.blockchain.binance.client.domain.TradePage; -import com.tangem.blockchain.binance.client.domain.TransactionMetadata; -import com.tangem.blockchain.binance.client.domain.TransactionPage; -import com.tangem.blockchain.binance.client.domain.Validators; -import com.tangem.blockchain.binance.client.domain.broadcast.CancelOrder; -import com.tangem.blockchain.binance.client.domain.broadcast.NewOrder; -import com.tangem.blockchain.binance.client.domain.broadcast.TokenFreeze; -import com.tangem.blockchain.binance.client.domain.broadcast.TokenUnfreeze; -import com.tangem.blockchain.binance.client.domain.broadcast.TransactionOption; -import com.tangem.blockchain.binance.client.domain.broadcast.Transfer; -import com.tangem.blockchain.binance.client.domain.request.ClosedOrdersRequest; -import com.tangem.blockchain.binance.client.domain.request.OpenOrdersRequest; -import com.tangem.blockchain.binance.client.domain.request.TradesRequest; -import com.tangem.blockchain.binance.client.domain.request.TransactionsRequest; -import com.tangem.blockchain.binance.client.encoding.message.TransactionRequestAssemblerExtSign; +import com.tangem.blockchain.blockchains.binance.BinanceAccountData; +import com.tangem.blockchain.blockchains.binance.client.domain.Account; +import com.tangem.blockchain.blockchains.binance.client.domain.AccountSequence; +import com.tangem.blockchain.blockchains.binance.client.domain.Candlestick; +import com.tangem.blockchain.blockchains.binance.client.domain.CandlestickInterval; +import com.tangem.blockchain.blockchains.binance.client.domain.Infos; +import com.tangem.blockchain.blockchains.binance.client.domain.Market; +import com.tangem.blockchain.blockchains.binance.client.domain.Order; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderBook; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderList; +import com.tangem.blockchain.blockchains.binance.client.domain.Peer; +import com.tangem.blockchain.blockchains.binance.client.domain.TickerStatistics; +import com.tangem.blockchain.blockchains.binance.client.domain.Time; +import com.tangem.blockchain.blockchains.binance.client.domain.Token; +import com.tangem.blockchain.blockchains.binance.client.domain.TradePage; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionMetadata; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionPage; +import com.tangem.blockchain.blockchains.binance.client.domain.Validators; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.CancelOrder; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.NewOrder; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TokenFreeze; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TokenUnfreeze; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TransactionOption; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.Transfer; +import com.tangem.blockchain.blockchains.binance.client.domain.request.ClosedOrdersRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.OpenOrdersRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.TradesRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.TransactionsRequest; +import com.tangem.blockchain.blockchains.binance.client.encoding.message.TransactionRequestAssemblerExtSign; import java.io.IOException; import java.security.NoSuchAlgorithmException; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexConstants.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexConstants.java similarity index 89% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexConstants.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexConstants.java index 104d109656..6c9cedb7ed 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexConstants.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexConstants.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; import org.apache.commons.lang3.builder.ToStringStyle; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexEnvironment.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexEnvironment.java similarity index 93% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexEnvironment.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexEnvironment.java index 02d6b8a1c4..7580366fab 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/BinanceDexEnvironment.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/BinanceDexEnvironment.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; public enum BinanceDexEnvironment { PROD( diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/Wallet.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/Wallet.java similarity index 92% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/Wallet.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/Wallet.java index e24bab0187..98ca88f468 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/Wallet.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/Wallet.java @@ -1,10 +1,10 @@ -package com.tangem.blockchain.binance.client; +package com.tangem.blockchain.blockchains.binance.client; -import com.tangem.blockchain.binance.client.domain.Account; -import com.tangem.blockchain.binance.client.domain.AccountSequence; -import com.tangem.blockchain.binance.client.domain.Infos; -import com.tangem.blockchain.binance.client.encoding.Crypto; -import com.tangem.blockchain.binance.client.encoding.message.MessageType; +import com.tangem.blockchain.blockchains.binance.client.domain.Account; +import com.tangem.blockchain.blockchains.binance.client.domain.AccountSequence; +import com.tangem.blockchain.blockchains.binance.client.domain.Infos; +import com.tangem.blockchain.blockchains.binance.client.encoding.Crypto; +import com.tangem.blockchain.blockchains.binance.client.encoding.message.MessageType; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Account.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Account.java similarity index 92% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Account.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Account.java index b9a4768da8..d5994c729b 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Account.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Account.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/AccountSequence.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/AccountSequence.java similarity index 80% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/AccountSequence.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/AccountSequence.java index 656aaf0359..1c5d8276e3 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/AccountSequence.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/AccountSequence.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Balance.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Balance.java similarity index 89% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Balance.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Balance.java index 590d1452c3..9c3cfa2d23 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Balance.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Balance.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Candlestick.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Candlestick.java similarity index 94% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Candlestick.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Candlestick.java index 700cdd4193..276002fff3 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Candlestick.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Candlestick.java @@ -1,9 +1,9 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/CandlestickInterval.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/CandlestickInterval.java similarity index 95% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/CandlestickInterval.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/CandlestickInterval.java index 9203590789..8b7611675f 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/CandlestickInterval.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/CandlestickInterval.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Infos.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Infos.java similarity index 90% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Infos.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Infos.java index 210454c815..4b0de253ad 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Infos.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Infos.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Market.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Market.java similarity index 92% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Market.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Market.java index 5b50b07297..35cf20e04b 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Market.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Market.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/NodeInfo.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/NodeInfo.java similarity index 93% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/NodeInfo.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/NodeInfo.java index c6659acdce..df3c219135 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/NodeInfo.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/NodeInfo.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Order.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Order.java similarity index 97% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Order.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Order.java index 5c6514990f..ed9df01889 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Order.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Order.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; import org.joda.time.DateTime; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBook.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBook.java similarity index 88% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBook.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBook.java index 2feee36a1e..b658053989 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBook.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBook.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntry.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntry.java similarity index 88% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntry.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntry.java index b8c7f2cddb..b3c3cb79ff 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntry.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntry.java @@ -1,9 +1,9 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntryDeserializer.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntryDeserializer.java similarity index 92% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntryDeserializer.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntryDeserializer.java index b9d15941a0..9cd19067e2 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntryDeserializer.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntryDeserializer.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.ObjectCodec; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntrySerializer.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntrySerializer.java similarity index 90% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntrySerializer.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntrySerializer.java index 1788669945..5ce430af9d 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderBookEntrySerializer.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderBookEntrySerializer.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderList.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderList.java similarity index 85% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderList.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderList.java index b116e0840d..79a8fbb207 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderList.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderList.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderSide.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderSide.java similarity index 89% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderSide.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderSide.java index 02ca808e6c..25e7c697c4 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderSide.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderSide.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderStatus.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderStatus.java similarity index 65% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderStatus.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderStatus.java index 052ba39b18..d0d2a944b5 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderStatus.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderStatus.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; public enum OrderStatus { Ack, diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderType.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderType.java similarity index 89% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderType.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderType.java index 8f91622044..6ff51931b6 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/OrderType.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/OrderType.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Peer.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Peer.java similarity index 95% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Peer.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Peer.java index 2941def17c..0d7bc3cb3c 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Peer.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Peer.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/SyncInfo.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/SyncInfo.java similarity index 93% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/SyncInfo.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/SyncInfo.java index 21cc75e9f0..0be0ff7187 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/SyncInfo.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/SyncInfo.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; import org.joda.time.DateTime; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TickerStatistics.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TickerStatistics.java similarity index 97% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TickerStatistics.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TickerStatistics.java index 18eb76fbd7..55fb81250d 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TickerStatistics.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TickerStatistics.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Time.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Time.java similarity index 87% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Time.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Time.java index 868a45dc58..699f86ab3e 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Time.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Time.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; import org.joda.time.DateTime; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TimeInForce.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TimeInForce.java similarity index 89% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TimeInForce.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TimeInForce.java index d01a4f3638..de43af7990 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TimeInForce.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TimeInForce.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Token.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Token.java similarity index 92% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Token.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Token.java index 772b39147f..d240e628fd 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Token.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Token.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Trade.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Trade.java similarity index 96% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Trade.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Trade.java index 8b3529f8d9..f854e6fbca 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Trade.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Trade.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TradePage.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TradePage.java similarity index 85% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TradePage.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TradePage.java index ecd67deba7..7e4fea549b 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TradePage.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TradePage.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TradeStatistics.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TradeStatistics.java similarity index 68% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TradeStatistics.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TradeStatistics.java index ed33feb78f..70fd04853d 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TradeStatistics.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TradeStatistics.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Transaction.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Transaction.java similarity index 96% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Transaction.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Transaction.java index 6ba2c8ccb7..52d91aca67 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Transaction.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Transaction.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionMetadata.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionMetadata.java similarity index 93% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionMetadata.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionMetadata.java index 831916b742..1d792e1563 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionMetadata.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionMetadata.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionPage.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionPage.java similarity index 85% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionPage.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionPage.java index 992ac7cbd1..fa73514164 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionPage.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionPage.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionType.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionType.java similarity index 74% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionType.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionType.java index f8be339797..97629c2dcc 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/TransactionType.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/TransactionType.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; public enum TransactionType { NEW_ORDER, diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/ValidatorInfo.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/ValidatorInfo.java similarity index 89% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/ValidatorInfo.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/ValidatorInfo.java index 8c0883cca8..746b6cb6a0 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/ValidatorInfo.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/ValidatorInfo.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Validators.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Validators.java similarity index 87% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Validators.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Validators.java index c1bb9d9f7b..9c1930bbee 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/Validators.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/Validators.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain; +package com.tangem.blockchain.blockchains.binance.client.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/CancelOrder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/CancelOrder.java similarity index 83% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/CancelOrder.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/CancelOrder.java index 6129228ac1..b5770a3fd6 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/CancelOrder.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/CancelOrder.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain.broadcast; +package com.tangem.blockchain.blockchains.binance.client.domain.broadcast; import com.fasterxml.jackson.annotation.JsonProperty; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/NewOrder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/NewOrder.java similarity index 81% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/NewOrder.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/NewOrder.java index 345cb44b97..63bd461d3a 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/NewOrder.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/NewOrder.java @@ -1,9 +1,9 @@ -package com.tangem.blockchain.binance.client.domain.broadcast; +package com.tangem.blockchain.blockchains.binance.client.domain.broadcast; -import com.tangem.blockchain.binance.client.BinanceDexConstants; -import com.tangem.blockchain.binance.client.domain.OrderSide; -import com.tangem.blockchain.binance.client.domain.OrderType; -import com.tangem.blockchain.binance.client.domain.TimeInForce; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderSide; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderType; +import com.tangem.blockchain.blockchains.binance.client.domain.TimeInForce; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TokenFreeze.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TokenFreeze.java similarity index 81% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TokenFreeze.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TokenFreeze.java index 1e7b060765..228b7162ba 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TokenFreeze.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TokenFreeze.java @@ -1,6 +1,6 @@ -package com.tangem.blockchain.binance.client.domain.broadcast; +package com.tangem.blockchain.blockchains.binance.client.domain.broadcast; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TokenUnfreeze.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TokenUnfreeze.java similarity index 81% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TokenUnfreeze.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TokenUnfreeze.java index 3237ea9c97..798d5e5512 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TokenUnfreeze.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TokenUnfreeze.java @@ -1,6 +1,6 @@ -package com.tangem.blockchain.binance.client.domain.broadcast; +package com.tangem.blockchain.blockchains.binance.client.domain.broadcast; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TransactionOption.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TransactionOption.java similarity index 89% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TransactionOption.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TransactionOption.java index 4dea64843c..fdae3fc302 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/TransactionOption.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/TransactionOption.java @@ -1,6 +1,6 @@ -package com.tangem.blockchain.binance.client.domain.broadcast; +package com.tangem.blockchain.blockchains.binance.client.domain.broadcast; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/Transfer.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/Transfer.java similarity index 88% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/Transfer.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/Transfer.java index e9a9d0cbed..5b7c88693c 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/broadcast/Transfer.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/broadcast/Transfer.java @@ -1,6 +1,6 @@ -package com.tangem.blockchain.binance.client.domain.broadcast; +package com.tangem.blockchain.blockchains.binance.client.domain.broadcast; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/ClosedOrdersRequest.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/ClosedOrdersRequest.java similarity index 87% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/ClosedOrdersRequest.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/ClosedOrdersRequest.java index e9a0245677..5008ea4f91 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/ClosedOrdersRequest.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/ClosedOrdersRequest.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain.request; +package com.tangem.blockchain.blockchains.binance.client.domain.request; -import com.tangem.blockchain.binance.client.BinanceDexConstants; -import com.tangem.blockchain.binance.client.domain.OrderSide; -import com.tangem.blockchain.binance.client.domain.OrderStatus; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderSide; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderStatus; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/OpenOrdersRequest.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/OpenOrdersRequest.java similarity index 89% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/OpenOrdersRequest.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/OpenOrdersRequest.java index d7c764d453..0ad10b0949 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/OpenOrdersRequest.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/OpenOrdersRequest.java @@ -1,6 +1,6 @@ -package com.tangem.blockchain.binance.client.domain.request; +package com.tangem.blockchain.blockchains.binance.client.domain.request; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/TradesRequest.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/TradesRequest.java similarity index 92% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/TradesRequest.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/TradesRequest.java index ebf505f1d7..eb715f18a4 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/TradesRequest.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/TradesRequest.java @@ -1,7 +1,7 @@ -package com.tangem.blockchain.binance.client.domain.request; +package com.tangem.blockchain.blockchains.binance.client.domain.request; -import com.tangem.blockchain.binance.client.BinanceDexConstants; -import com.tangem.blockchain.binance.client.domain.OrderSide; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderSide; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/TransactionsRequest.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/TransactionsRequest.java similarity index 88% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/TransactionsRequest.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/TransactionsRequest.java index f1fab0e58d..3383340338 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/domain/request/TransactionsRequest.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/domain/request/TransactionsRequest.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.domain.request; +package com.tangem.blockchain.blockchains.binance.client.domain.request; -import com.tangem.blockchain.binance.client.BinanceDexConstants; -import com.tangem.blockchain.binance.client.domain.OrderSide; -import com.tangem.blockchain.binance.client.domain.TransactionType; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderSide; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionType; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/AddressFormatException.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/AddressFormatException.java similarity index 98% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/AddressFormatException.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/AddressFormatException.java index beb65209fe..e317e9ab57 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/AddressFormatException.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/AddressFormatException.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.tangem.blockchain.binance.client.encoding; +package com.tangem.blockchain.blockchains.binance.client.encoding; import org.bitcoinj.core.Base58; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/Bech32.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/Bech32.java similarity index 99% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/Bech32.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/Bech32.java index b4fd3d8928..0cc3ba6cf4 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/Bech32.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/Bech32.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.tangem.blockchain.binance.client.encoding; +package com.tangem.blockchain.blockchains.binance.client.encoding; import java.util.Arrays; import java.util.Locale; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/Crypto.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/Crypto.java similarity index 98% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/Crypto.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/Crypto.java index 03bc61e8fc..978ee1688c 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/Crypto.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/Crypto.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.encoding; +package com.tangem.blockchain.blockchains.binance.client.encoding; import org.bitcoinj.core.ECKey; import org.bitcoinj.core.Sha256Hash; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/EncodeUtils.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/EncodeUtils.java similarity index 96% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/EncodeUtils.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/EncodeUtils.java index 16c884de83..e115f2842d 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/EncodeUtils.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/EncodeUtils.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.encoding; +package com.tangem.blockchain.blockchains.binance.client.encoding; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/BinanceDexTransactionMessage.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/BinanceDexTransactionMessage.java new file mode 100644 index 0000000000..d5d8eb741b --- /dev/null +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/BinanceDexTransactionMessage.java @@ -0,0 +1,4 @@ +package com.tangem.blockchain.blockchains.binance.client.encoding.message; + +public interface BinanceDexTransactionMessage { +} diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/CancelOrderMessage.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/CancelOrderMessage.java similarity index 88% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/CancelOrderMessage.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/CancelOrderMessage.java index 97c02a3963..86ef9ac37e 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/CancelOrderMessage.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/CancelOrderMessage.java @@ -1,9 +1,9 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/InputOutput.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/InputOutput.java similarity index 85% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/InputOutput.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/InputOutput.java index 4600475f79..f721c72d80 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/InputOutput.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/InputOutput.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/MessageType.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/MessageType.java similarity index 80% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/MessageType.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/MessageType.java index bb0107b6ec..df1461e92d 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/MessageType.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/MessageType.java @@ -1,6 +1,6 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; -import com.tangem.blockchain.binance.client.encoding.EncodeUtils; +import com.tangem.blockchain.blockchains.binance.client.encoding.EncodeUtils; /** * Binance dex standard transactiont types. diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/NewOrderMessage.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/NewOrderMessage.java similarity index 94% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/NewOrderMessage.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/NewOrderMessage.java index 66595d37f5..1739985a5c 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/NewOrderMessage.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/NewOrderMessage.java @@ -1,11 +1,11 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.tangem.blockchain.binance.client.domain.OrderSide; -import com.tangem.blockchain.binance.client.domain.OrderType; -import com.tangem.blockchain.binance.client.domain.TimeInForce; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderSide; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderType; +import com.tangem.blockchain.blockchains.binance.client.domain.TimeInForce; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/SignData.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/SignData.java similarity index 96% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/SignData.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/SignData.java index 4b259dc94b..fcf009416b 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/SignData.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/SignData.java @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/Token.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/Token.java similarity index 85% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/Token.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/Token.java index 62b5826b6c..7a1c22586c 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/Token.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/Token.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TokenFreezeMessage.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TokenFreezeMessage.java similarity index 88% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TokenFreezeMessage.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TokenFreezeMessage.java index a8f107f81b..6cb2e22052 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TokenFreezeMessage.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TokenFreezeMessage.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TokenUnfreezeMessage.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TokenUnfreezeMessage.java similarity index 88% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TokenUnfreezeMessage.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TokenUnfreezeMessage.java index 2ec5827eaa..8fbc8071a4 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TokenUnfreezeMessage.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TokenUnfreezeMessage.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransactionRequestAssembler.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransactionRequestAssembler.java similarity index 77% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransactionRequestAssembler.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransactionRequestAssembler.java index 74c27ae9b4..3def18de6d 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransactionRequestAssembler.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransactionRequestAssembler.java @@ -1,17 +1,17 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.core.JsonProcessingException; import com.google.common.annotations.VisibleForTesting; import com.google.protobuf.ByteString; -import com.tangem.blockchain.binance.client.Wallet; -import com.tangem.blockchain.binance.client.domain.broadcast.TokenFreeze; -import com.tangem.blockchain.binance.client.domain.broadcast.TokenUnfreeze; -import com.tangem.blockchain.binance.client.domain.broadcast.TransactionOption; -import com.tangem.blockchain.binance.client.domain.broadcast.Transfer; -import com.tangem.blockchain.binance.client.encoding.Crypto; -import com.tangem.blockchain.binance.client.encoding.EncodeUtils; -import com.tangem.blockchain.binance.proto.StdSignature; -import com.tangem.blockchain.binance.proto.StdTx; +import com.tangem.blockchain.blockchains.binance.client.Wallet; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TokenFreeze; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TokenUnfreeze; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TransactionOption; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.Transfer; +import com.tangem.blockchain.blockchains.binance.client.encoding.Crypto; +import com.tangem.blockchain.blockchains.binance.client.encoding.EncodeUtils; +import com.tangem.blockchain.blockchains.binance.proto.StdSignature; +import com.tangem.blockchain.blockchains.binance.proto.StdTx; import java.io.IOException; import java.math.BigDecimal; @@ -102,7 +102,7 @@ public class TransactionRequestAssembler { @VisibleForTesting NewOrderMessage createNewOrderMessage( - com.tangem.blockchain.binance.client.domain.broadcast.NewOrder newOrder) { + com.tangem.blockchain.blockchains.binance.client.domain.broadcast.NewOrder newOrder) { return NewOrderMessage.newBuilder() .setId(generateOrderId()) .setOrderType(newOrder.getOrderType()) @@ -118,7 +118,7 @@ public class TransactionRequestAssembler { @VisibleForTesting byte[] encodeNewOrderMessage(NewOrderMessage newOrder) throws IOException { - com.tangem.blockchain.binance.proto.NewOrder proto = com.tangem.blockchain.binance.proto.NewOrder.newBuilder() + com.tangem.blockchain.blockchains.binance.proto.NewOrder proto = com.tangem.blockchain.blockchains.binance.proto.NewOrder.newBuilder() .setSender(ByteString.copyFrom(wallet.getAddressBytes())) .setId(newOrder.getId()) .setSymbol(newOrder.getSymbol()) @@ -131,7 +131,7 @@ public class TransactionRequestAssembler { return EncodeUtils.aminoWrap(proto.toByteArray(), MessageType.NewOrder.getTypePrefixBytes(), false); } - public RequestBody buildNewOrder(com.tangem.blockchain.binance.client.domain.broadcast.NewOrder newOrder) + public RequestBody buildNewOrder(com.tangem.blockchain.blockchains.binance.client.domain.broadcast.NewOrder newOrder) throws IOException, NoSuchAlgorithmException { NewOrderMessage msgBean = createNewOrderMessage(newOrder); byte[] msg = encodeNewOrderMessage(msgBean); @@ -142,7 +142,7 @@ public class TransactionRequestAssembler { @VisibleForTesting CancelOrderMessage createCancelOrderMessage( - com.tangem.blockchain.binance.client.domain.broadcast.CancelOrder cancelOrder) { + com.tangem.blockchain.blockchains.binance.client.domain.broadcast.CancelOrder cancelOrder) { CancelOrderMessage bean = new CancelOrderMessage(); bean.setRefId(cancelOrder.getRefId()); @@ -154,7 +154,7 @@ public class TransactionRequestAssembler { @VisibleForTesting byte[] encodeCancelOrderMessage(CancelOrderMessage cancelOrder) throws IOException { - com.tangem.blockchain.binance.proto.CancelOrder proto = com.tangem.blockchain.binance.proto.CancelOrder.newBuilder() + com.tangem.blockchain.blockchains.binance.proto.CancelOrder proto = com.tangem.blockchain.blockchains.binance.proto.CancelOrder.newBuilder() .setSender(ByteString.copyFrom(wallet.getAddressBytes())) .setSymbol(cancelOrder.getSymbol()) .setRefid(cancelOrder.getRefId()) @@ -162,7 +162,7 @@ public class TransactionRequestAssembler { return EncodeUtils.aminoWrap(proto.toByteArray(), MessageType.CancelOrder.getTypePrefixBytes(), false); } - public RequestBody buildCancelOrder(com.tangem.blockchain.binance.client.domain.broadcast.CancelOrder cancelOrder) + public RequestBody buildCancelOrder(com.tangem.blockchain.blockchains.binance.client.domain.broadcast.CancelOrder cancelOrder) throws IOException, NoSuchAlgorithmException { CancelOrderMessage msgBean = createCancelOrderMessage(cancelOrder); byte[] msg = encodeCancelOrderMessage(msgBean); @@ -191,28 +191,28 @@ public class TransactionRequestAssembler { return msgBean; } - private com.tangem.blockchain.binance.proto.Send.Input toProtoInput(InputOutput input) { + private com.tangem.blockchain.blockchains.binance.proto.Send.Input toProtoInput(InputOutput input) { byte[] address = Crypto.decodeAddress(input.getAddress()); - com.tangem.blockchain.binance.proto.Send.Input.Builder builder = - com.tangem.blockchain.binance.proto.Send.Input.newBuilder().setAddress(ByteString.copyFrom(address)); + com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder builder = + com.tangem.blockchain.blockchains.binance.proto.Send.Input.newBuilder().setAddress(ByteString.copyFrom(address)); for (Token coin : input.getCoins()) { - com.tangem.blockchain.binance.proto.Send.Token protCoin = - com.tangem.blockchain.binance.proto.Send.Token.newBuilder().setAmount(coin.getAmount()) + com.tangem.blockchain.blockchains.binance.proto.Send.Token protCoin = + com.tangem.blockchain.blockchains.binance.proto.Send.Token.newBuilder().setAmount(coin.getAmount()) .setDenom(coin.getDenom()).build(); builder.addCoins(protCoin); } return builder.build(); } - private com.tangem.blockchain.binance.proto.Send.Output toProtoOutput(InputOutput output) { + private com.tangem.blockchain.blockchains.binance.proto.Send.Output toProtoOutput(InputOutput output) { byte[] address = Crypto.decodeAddress(output.getAddress()); - com.tangem.blockchain.binance.proto.Send.Output.Builder builder = - com.tangem.blockchain.binance.proto.Send.Output.newBuilder().setAddress(ByteString.copyFrom(address)); + com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder builder = + com.tangem.blockchain.blockchains.binance.proto.Send.Output.newBuilder().setAddress(ByteString.copyFrom(address)); for (Token coin : output.getCoins()) { - com.tangem.blockchain.binance.proto.Send.Token protCoin = - com.tangem.blockchain.binance.proto.Send.Token.newBuilder().setAmount(coin.getAmount()) + com.tangem.blockchain.blockchains.binance.proto.Send.Token protCoin = + com.tangem.blockchain.blockchains.binance.proto.Send.Token.newBuilder().setAmount(coin.getAmount()) .setDenom(coin.getDenom()).build(); builder.addCoins(protCoin); } @@ -222,14 +222,14 @@ public class TransactionRequestAssembler { @VisibleForTesting byte[] encodeTransferMessage(TransferMessage msg) throws IOException { - com.tangem.blockchain.binance.proto.Send.Builder builder = com.tangem.blockchain.binance.proto.Send.newBuilder(); + com.tangem.blockchain.blockchains.binance.proto.Send.Builder builder = com.tangem.blockchain.blockchains.binance.proto.Send.newBuilder(); for (InputOutput input : msg.getInputs()) { builder.addInputs(toProtoInput(input)); } for (InputOutput output : msg.getOutputs()) { builder.addOutputs(toProtoOutput(output)); } - com.tangem.blockchain.binance.proto.Send proto = builder.build(); + com.tangem.blockchain.blockchains.binance.proto.Send proto = builder.build(); return EncodeUtils.aminoWrap(proto.toByteArray(), MessageType.Send.getTypePrefixBytes(), false); } @@ -254,8 +254,8 @@ public class TransactionRequestAssembler { @VisibleForTesting byte[] encodeTokenFreezeMessage(TokenFreezeMessage freeze) throws IOException { byte[] address = Crypto.decodeAddress(freeze.getFrom()); - com.tangem.blockchain.binance.proto.TokenFreeze proto = - com.tangem.blockchain.binance.proto.TokenFreeze.newBuilder().setFrom(ByteString.copyFrom(address)) + com.tangem.blockchain.blockchains.binance.proto.TokenFreeze proto = + com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.newBuilder().setFrom(ByteString.copyFrom(address)) .setAmount(freeze.getAmount()) .setSymbol(freeze.getSymbol()) .build(); @@ -283,8 +283,8 @@ public class TransactionRequestAssembler { @VisibleForTesting byte[] encodeTokenUnfreezeMessage(TokenUnfreezeMessage unfreeze) throws IOException { byte[] address = Crypto.decodeAddress(unfreeze.getFrom()); - com.tangem.blockchain.binance.proto.TokenUnfreeze proto = - com.tangem.blockchain.binance.proto.TokenUnfreeze.newBuilder().setFrom(ByteString.copyFrom(address)) + com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze proto = + com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.newBuilder().setFrom(ByteString.copyFrom(address)) .setAmount(unfreeze.getAmount()) .setSymbol(unfreeze.getSymbol()) .build(); diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransactionRequestAssemblerExtSign.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransactionRequestAssemblerExtSign.java similarity index 74% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransactionRequestAssemblerExtSign.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransactionRequestAssemblerExtSign.java index 542035b54f..56090e756c 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransactionRequestAssemblerExtSign.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransactionRequestAssemblerExtSign.java @@ -1,14 +1,14 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.core.JsonProcessingException; import com.google.protobuf.ByteString; -import com.tangem.blockchain.binance.BinanceAccountData; -import com.tangem.blockchain.binance.client.domain.broadcast.TransactionOption; -import com.tangem.blockchain.binance.client.domain.broadcast.Transfer; -import com.tangem.blockchain.binance.client.encoding.Crypto; -import com.tangem.blockchain.binance.client.encoding.EncodeUtils; -import com.tangem.blockchain.binance.proto.StdSignature; -import com.tangem.blockchain.binance.proto.StdTx; +import com.tangem.blockchain.blockchains.binance.BinanceAccountData; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TransactionOption; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.Transfer; +import com.tangem.blockchain.blockchains.binance.client.encoding.Crypto; +import com.tangem.blockchain.blockchains.binance.client.encoding.EncodeUtils; +import com.tangem.blockchain.blockchains.binance.proto.StdSignature; +import com.tangem.blockchain.blockchains.binance.proto.StdTx; import java.io.IOException; import java.math.BigDecimal; @@ -107,28 +107,28 @@ public class TransactionRequestAssemblerExtSign { return msgBean; } - private com.tangem.blockchain.binance.proto.Send.Input toProtoInput(InputOutput input) { + private com.tangem.blockchain.blockchains.binance.proto.Send.Input toProtoInput(InputOutput input) { byte[] address = Crypto.decodeAddress(input.getAddress()); - com.tangem.blockchain.binance.proto.Send.Input.Builder builder = - com.tangem.blockchain.binance.proto.Send.Input.newBuilder().setAddress(ByteString.copyFrom(address)); + com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder builder = + com.tangem.blockchain.blockchains.binance.proto.Send.Input.newBuilder().setAddress(ByteString.copyFrom(address)); for (Token coin : input.getCoins()) { - com.tangem.blockchain.binance.proto.Send.Token protCoin = - com.tangem.blockchain.binance.proto.Send.Token.newBuilder().setAmount(coin.getAmount()) + com.tangem.blockchain.blockchains.binance.proto.Send.Token protCoin = + com.tangem.blockchain.blockchains.binance.proto.Send.Token.newBuilder().setAmount(coin.getAmount()) .setDenom(coin.getDenom()).build(); builder.addCoins(protCoin); } return builder.build(); } - private com.tangem.blockchain.binance.proto.Send.Output toProtoOutput(InputOutput output) { + private com.tangem.blockchain.blockchains.binance.proto.Send.Output toProtoOutput(InputOutput output) { byte[] address = Crypto.decodeAddress(output.getAddress()); - com.tangem.blockchain.binance.proto.Send.Output.Builder builder = - com.tangem.blockchain.binance.proto.Send.Output.newBuilder().setAddress(ByteString.copyFrom(address)); + com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder builder = + com.tangem.blockchain.blockchains.binance.proto.Send.Output.newBuilder().setAddress(ByteString.copyFrom(address)); for (Token coin : output.getCoins()) { - com.tangem.blockchain.binance.proto.Send.Token protCoin = - com.tangem.blockchain.binance.proto.Send.Token.newBuilder().setAmount(coin.getAmount()) + com.tangem.blockchain.blockchains.binance.proto.Send.Token protCoin = + com.tangem.blockchain.blockchains.binance.proto.Send.Token.newBuilder().setAmount(coin.getAmount()) .setDenom(coin.getDenom()).build(); builder.addCoins(protCoin); } @@ -137,14 +137,14 @@ public class TransactionRequestAssemblerExtSign { public byte[] encodeTransferMessage(TransferMessage msg) throws IOException { - com.tangem.blockchain.binance.proto.Send.Builder builder = com.tangem.blockchain.binance.proto.Send.newBuilder(); + com.tangem.blockchain.blockchains.binance.proto.Send.Builder builder = com.tangem.blockchain.blockchains.binance.proto.Send.newBuilder(); for (InputOutput input : msg.getInputs()) { builder.addInputs(toProtoInput(input)); } for (InputOutput output : msg.getOutputs()) { builder.addOutputs(toProtoOutput(output)); } - com.tangem.blockchain.binance.proto.Send proto = builder.build(); + com.tangem.blockchain.blockchains.binance.proto.Send proto = builder.build(); return EncodeUtils.aminoWrap(proto.toByteArray(), MessageType.Send.getTypePrefixBytes(), false); } diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransferMessage.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransferMessage.java similarity index 87% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransferMessage.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransferMessage.java index 03127c1b4e..c65f80f672 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/encoding/message/TransferMessage.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/encoding/message/TransferMessage.java @@ -1,8 +1,8 @@ -package com.tangem.blockchain.binance.client.encoding.message; +package com.tangem.blockchain.blockchains.binance.client.encoding.message; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.tangem.blockchain.binance.client.BinanceDexConstants; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexConstants; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/impl/BinanceDexApiAsyncRestClientImpl.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/impl/BinanceDexApiAsyncRestClientImpl.java similarity index 76% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/impl/BinanceDexApiAsyncRestClientImpl.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/impl/BinanceDexApiAsyncRestClientImpl.java index 8a0b39ff41..599eefc9bd 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/impl/BinanceDexApiAsyncRestClientImpl.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/impl/BinanceDexApiAsyncRestClientImpl.java @@ -1,15 +1,35 @@ -package com.tangem.blockchain.binance.client.impl; +package com.tangem.blockchain.blockchains.binance.client.impl; import android.os.Build; import androidx.annotation.RequiresApi; -import com.tangem.blockchain.binance.client.*; -import com.tangem.blockchain.binance.client.domain.*; -import com.tangem.blockchain.binance.client.domain.request.ClosedOrdersRequest; -import com.tangem.blockchain.binance.client.domain.request.OpenOrdersRequest; -import com.tangem.blockchain.binance.client.domain.request.TradesRequest; -import com.tangem.blockchain.binance.client.domain.request.TransactionsRequest; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApi; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiAsyncRestClient; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiCallback; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiCallbackAdapter; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiClientGenerator; +import com.tangem.blockchain.blockchains.binance.client.domain.Account; +import com.tangem.blockchain.blockchains.binance.client.domain.AccountSequence; +import com.tangem.blockchain.blockchains.binance.client.domain.Candlestick; +import com.tangem.blockchain.blockchains.binance.client.domain.CandlestickInterval; +import com.tangem.blockchain.blockchains.binance.client.domain.Infos; +import com.tangem.blockchain.blockchains.binance.client.domain.Market; +import com.tangem.blockchain.blockchains.binance.client.domain.Order; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderBook; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderList; +import com.tangem.blockchain.blockchains.binance.client.domain.Peer; +import com.tangem.blockchain.blockchains.binance.client.domain.TickerStatistics; +import com.tangem.blockchain.blockchains.binance.client.domain.Time; +import com.tangem.blockchain.blockchains.binance.client.domain.Token; +import com.tangem.blockchain.blockchains.binance.client.domain.TradePage; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionMetadata; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionPage; +import com.tangem.blockchain.blockchains.binance.client.domain.Validators; +import com.tangem.blockchain.blockchains.binance.client.domain.request.ClosedOrdersRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.OpenOrdersRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.TradesRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.TransactionsRequest; import java.util.List; import java.util.stream.Collectors; diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/client/impl/BinanceDexApiRestClientImpl.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/impl/BinanceDexApiRestClientImpl.java similarity index 76% rename from blockchain/src/main/java/com/tangem/blockchain/binance/client/impl/BinanceDexApiRestClientImpl.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/impl/BinanceDexApiRestClientImpl.java index 1203500906..ce3718eecb 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/client/impl/BinanceDexApiRestClientImpl.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/client/impl/BinanceDexApiRestClientImpl.java @@ -1,27 +1,52 @@ -package com.tangem.blockchain.binance.client.impl; +package com.tangem.blockchain.blockchains.binance.client.impl; import android.os.Build; import androidx.annotation.RequiresApi; -import com.tangem.blockchain.binance.BinanceAccountData; -import com.tangem.blockchain.binance.client.*; -import com.tangem.blockchain.binance.client.domain.*; -import com.tangem.blockchain.binance.client.domain.broadcast.*; -import com.tangem.blockchain.binance.client.domain.request.ClosedOrdersRequest; -import com.tangem.blockchain.binance.client.domain.request.OpenOrdersRequest; -import com.tangem.blockchain.binance.client.domain.request.TradesRequest; -import com.tangem.blockchain.binance.client.domain.request.TransactionsRequest; -import com.tangem.blockchain.binance.client.encoding.message.TransactionRequestAssembler; -import com.tangem.blockchain.binance.client.encoding.message.TransactionRequestAssemblerExtSign; - -import okhttp3.RequestBody; +import com.tangem.blockchain.blockchains.binance.BinanceAccountData; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApi; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiClientGenerator; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiException; +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiRestClient; +import com.tangem.blockchain.blockchains.binance.client.Wallet; +import com.tangem.blockchain.blockchains.binance.client.domain.Account; +import com.tangem.blockchain.blockchains.binance.client.domain.AccountSequence; +import com.tangem.blockchain.blockchains.binance.client.domain.Candlestick; +import com.tangem.blockchain.blockchains.binance.client.domain.CandlestickInterval; +import com.tangem.blockchain.blockchains.binance.client.domain.Infos; +import com.tangem.blockchain.blockchains.binance.client.domain.Market; +import com.tangem.blockchain.blockchains.binance.client.domain.Order; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderBook; +import com.tangem.blockchain.blockchains.binance.client.domain.OrderList; +import com.tangem.blockchain.blockchains.binance.client.domain.Peer; +import com.tangem.blockchain.blockchains.binance.client.domain.TickerStatistics; +import com.tangem.blockchain.blockchains.binance.client.domain.Time; +import com.tangem.blockchain.blockchains.binance.client.domain.Token; +import com.tangem.blockchain.blockchains.binance.client.domain.TradePage; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionMetadata; +import com.tangem.blockchain.blockchains.binance.client.domain.TransactionPage; +import com.tangem.blockchain.blockchains.binance.client.domain.Validators; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.CancelOrder; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.NewOrder; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TokenFreeze; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TokenUnfreeze; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.TransactionOption; +import com.tangem.blockchain.blockchains.binance.client.domain.broadcast.Transfer; +import com.tangem.blockchain.blockchains.binance.client.domain.request.ClosedOrdersRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.OpenOrdersRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.TradesRequest; +import com.tangem.blockchain.blockchains.binance.client.domain.request.TransactionsRequest; +import com.tangem.blockchain.blockchains.binance.client.encoding.message.TransactionRequestAssembler; +import com.tangem.blockchain.blockchains.binance.client.encoding.message.TransactionRequestAssemblerExtSign; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.List; import java.util.stream.Collectors; +import okhttp3.RequestBody; + /** * Binance DEX API rest client, supporting synchronous/blocking access Binance DEX's REST API. diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceApi.kt similarity index 63% rename from blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceApi.kt rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceApi.kt index 94848788e5..c09f7d88f4 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceApi.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceApi.kt @@ -1,6 +1,5 @@ -package com.tangem.blockchain.binance.network +package com.tangem.blockchain.blockchains.binance.network -import retrofit2.Call import retrofit2.http.GET interface BinanceApi { diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceNetworkManager.kt similarity index 80% rename from blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceNetworkManager.kt rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceNetworkManager.kt index 9e23db4578..f843695726 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceNetworkManager.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceNetworkManager.kt @@ -1,19 +1,19 @@ -package com.tangem.blockchain.binance.network +package com.tangem.blockchain.blockchains.binance.network -import com.tangem.blockchain.binance.client.BinanceDexApiClientFactory -import com.tangem.blockchain.binance.client.BinanceDexEnvironment -import com.tangem.blockchain.binance.client.encoding.message.TransactionRequestAssemblerExtSign +import com.tangem.blockchain.blockchains.binance.client.BinanceDexApiClientFactory +import com.tangem.blockchain.blockchains.binance.client.BinanceDexEnvironment +import com.tangem.blockchain.blockchains.binance.client.encoding.message.TransactionRequestAssemblerExtSign import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchain.common.extensions.Result -import com.tangem.blockchain.common.extensions.SimpleResult -import com.tangem.blockchain.common.extensions.retryIO -import com.tangem.blockchain.common.network.API_BINANCE -import com.tangem.blockchain.common.network.API_BINANCE_TESTNET -import com.tangem.blockchain.common.network.createRetrofitInstance +import com.tangem.blockchain.extensions.Result +import com.tangem.blockchain.extensions.SimpleResult +import com.tangem.blockchain.extensions.retryIO +import com.tangem.blockchain.network.API_BINANCE +import com.tangem.blockchain.network.API_BINANCE_TESTNET +import com.tangem.blockchain.network.createRetrofitInstance import okhttp3.RequestBody import java.math.BigDecimal -class BinanceNetworkManager(isTestNet: Boolean) { +class BinanceNetworkManager(isTestNet: Boolean = false) { val api = createRetrofitInstance(if (!isTestNet) API_BINANCE else API_BINANCE_TESTNET) .create(BinanceApi::class.java) val client = BinanceDexApiClientFactory.newInstance().newRestClient( @@ -57,7 +57,7 @@ class BinanceNetworkManager(isTestNet: Boolean) { for (binanceFee in feeData) { if (binanceFee.transactionFee != null) { fee = binanceFee.transactionFee?.value?.toBigDecimal() - ?.movePointLeft(Blockchain.Binance.decimals.toInt()) + ?.movePointLeft(Blockchain.Binance.decimals()) break } } diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceResponse.kt similarity index 87% rename from blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceResponse.kt rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceResponse.kt index 19b1d6790e..94ac501363 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/network/BinanceResponse.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/network/BinanceResponse.kt @@ -1,4 +1,4 @@ -package com.tangem.blockchain.binance.network +package com.tangem.blockchain.blockchains.binance.network import com.squareup.moshi.Json import com.squareup.moshi.JsonClass diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrder.java similarity index 82% rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrder.java rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrder.java index 25851c0dd9..848458ae27 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrder.java +++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrder.java @@ -1,7 +1,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: dex.proto -package com.tangem.blockchain.binance.proto; +package com.tangem.blockchain.blockchains.binance.proto; /** *
@@ -87,15 +87,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
   }
 
   @Override
   protected FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_fieldAccessorTable
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tangem.blockchain.binance.proto.CancelOrder.class, com.tangem.blockchain.binance.proto.CancelOrder.Builder.class);
+            com.tangem.blockchain.blockchains.binance.proto.CancelOrder.class, com.tangem.blockchain.blockchains.binance.proto.CancelOrder.Builder.class);
   }
 
   public static final int SENDER_FIELD_NUMBER = 1;
@@ -247,10 +247,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tangem.blockchain.binance.proto.CancelOrder)) {
+    if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.CancelOrder)) {
       return super.equals(obj);
     }
-    com.tangem.blockchain.binance.proto.CancelOrder other = (com.tangem.blockchain.binance.proto.CancelOrder) obj;
+    com.tangem.blockchain.blockchains.binance.proto.CancelOrder other = (com.tangem.blockchain.blockchains.binance.proto.CancelOrder) obj;
 
     if (!getSender()
         .equals(other.getSender())) return false;
@@ -280,69 +280,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
       java.nio.ByteBuffer data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
       com.google.protobuf.ByteString data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(byte[] data)
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
       byte[] data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseDelimitedFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseDelimitedFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.CancelOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -355,7 +355,7 @@ private static final long serialVersionUID = 0L;
   public static Builder newBuilder() {
     return DEFAULT_INSTANCE.toBuilder();
   }
-  public static Builder newBuilder(com.tangem.blockchain.binance.proto.CancelOrder prototype) {
+  public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.CancelOrder prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @Override
@@ -380,21 +380,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder implements
       // @@protoc_insertion_point(builder_implements:transaction.CancelOrder)
-      com.tangem.blockchain.binance.proto.CancelOrderOrBuilder {
+      com.tangem.blockchain.blockchains.binance.proto.CancelOrderOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.CancelOrder.class, com.tangem.blockchain.binance.proto.CancelOrder.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.CancelOrder.class, com.tangem.blockchain.blockchains.binance.proto.CancelOrder.Builder.class);
     }
 
-    // Construct using com.tangem.blockchain.binance.proto.CancelOrder.newBuilder()
+    // Construct using com.tangem.blockchain.blockchains.binance.proto.CancelOrder.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -424,17 +424,17 @@ private static final long serialVersionUID = 0L;
     @Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_CancelOrder_descriptor;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.CancelOrder getDefaultInstanceForType() {
-      return com.tangem.blockchain.binance.proto.CancelOrder.getDefaultInstance();
+    public com.tangem.blockchain.blockchains.binance.proto.CancelOrder getDefaultInstanceForType() {
+      return com.tangem.blockchain.blockchains.binance.proto.CancelOrder.getDefaultInstance();
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.CancelOrder build() {
-      com.tangem.blockchain.binance.proto.CancelOrder result = buildPartial();
+    public com.tangem.blockchain.blockchains.binance.proto.CancelOrder build() {
+      com.tangem.blockchain.blockchains.binance.proto.CancelOrder result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -442,8 +442,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.CancelOrder buildPartial() {
-      com.tangem.blockchain.binance.proto.CancelOrder result = new com.tangem.blockchain.binance.proto.CancelOrder(this);
+    public com.tangem.blockchain.blockchains.binance.proto.CancelOrder buildPartial() {
+      com.tangem.blockchain.blockchains.binance.proto.CancelOrder result = new com.tangem.blockchain.blockchains.binance.proto.CancelOrder(this);
       result.sender_ = sender_;
       result.symbol_ = symbol_;
       result.refid_ = refid_;
@@ -485,16 +485,16 @@ private static final long serialVersionUID = 0L;
     }
     @Override
     public Builder mergeFrom(com.google.protobuf.Message other) {
-      if (other instanceof com.tangem.blockchain.binance.proto.CancelOrder) {
-        return mergeFrom((com.tangem.blockchain.binance.proto.CancelOrder)other);
+      if (other instanceof com.tangem.blockchain.blockchains.binance.proto.CancelOrder) {
+        return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.CancelOrder)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tangem.blockchain.binance.proto.CancelOrder other) {
-      if (other == com.tangem.blockchain.binance.proto.CancelOrder.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.CancelOrder other) {
+      if (other == com.tangem.blockchain.blockchains.binance.proto.CancelOrder.getDefaultInstance()) return this;
       if (other.getSender() != com.google.protobuf.ByteString.EMPTY) {
         setSender(other.getSender());
       }
@@ -521,11 +521,11 @@ private static final long serialVersionUID = 0L;
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      com.tangem.blockchain.binance.proto.CancelOrder parsedMessage = null;
+      com.tangem.blockchain.blockchains.binance.proto.CancelOrder parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tangem.blockchain.binance.proto.CancelOrder) e.getUnfinishedMessage();
+        parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.CancelOrder) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -770,12 +770,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:transaction.CancelOrder)
-  private static final com.tangem.blockchain.binance.proto.CancelOrder DEFAULT_INSTANCE;
+  private static final com.tangem.blockchain.blockchains.binance.proto.CancelOrder DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.CancelOrder();
+    DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.CancelOrder();
   }
 
-  public static com.tangem.blockchain.binance.proto.CancelOrder getDefaultInstance() {
+  public static com.tangem.blockchain.blockchains.binance.proto.CancelOrder getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -800,7 +800,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @Override
-  public com.tangem.blockchain.binance.proto.CancelOrder getDefaultInstanceForType() {
+  public com.tangem.blockchain.blockchains.binance.proto.CancelOrder getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrderOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrderOrBuilder.java
similarity index 95%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrderOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrderOrBuilder.java
index 0e64ead9c6..d38131e1a8 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/CancelOrderOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/CancelOrderOrBuilder.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 public interface CancelOrderOrBuilder extends
     // @@protoc_insertion_point(interface_extends:transaction.CancelOrder)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrder.java
similarity index 87%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrder.java
index dbcdad4485..3772da239c 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrder.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 /**
  * 
@@ -112,15 +112,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
   }
 
   @Override
   protected FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_fieldAccessorTable
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tangem.blockchain.binance.proto.NewOrder.class, com.tangem.blockchain.binance.proto.NewOrder.Builder.class);
+            com.tangem.blockchain.blockchains.binance.proto.NewOrder.class, com.tangem.blockchain.blockchains.binance.proto.NewOrder.Builder.class);
   }
 
   public static final int SENDER_FIELD_NUMBER = 1;
@@ -372,10 +372,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tangem.blockchain.binance.proto.NewOrder)) {
+    if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.NewOrder)) {
       return super.equals(obj);
     }
-    com.tangem.blockchain.binance.proto.NewOrder other = (com.tangem.blockchain.binance.proto.NewOrder) obj;
+    com.tangem.blockchain.blockchains.binance.proto.NewOrder other = (com.tangem.blockchain.blockchains.binance.proto.NewOrder) obj;
 
     if (!getSender()
         .equals(other.getSender())) return false;
@@ -430,69 +430,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
       java.nio.ByteBuffer data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
       com.google.protobuf.ByteString data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(byte[] data)
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
       byte[] data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseDelimitedFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseDelimitedFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.NewOrder parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -505,7 +505,7 @@ private static final long serialVersionUID = 0L;
   public static Builder newBuilder() {
     return DEFAULT_INSTANCE.toBuilder();
   }
-  public static Builder newBuilder(com.tangem.blockchain.binance.proto.NewOrder prototype) {
+  public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.NewOrder prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @Override
@@ -530,21 +530,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder implements
       // @@protoc_insertion_point(builder_implements:transaction.NewOrder)
-      com.tangem.blockchain.binance.proto.NewOrderOrBuilder {
+      com.tangem.blockchain.blockchains.binance.proto.NewOrderOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.NewOrder.class, com.tangem.blockchain.binance.proto.NewOrder.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.NewOrder.class, com.tangem.blockchain.blockchains.binance.proto.NewOrder.Builder.class);
     }
 
-    // Construct using com.tangem.blockchain.binance.proto.NewOrder.newBuilder()
+    // Construct using com.tangem.blockchain.blockchains.binance.proto.NewOrder.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -584,17 +584,17 @@ private static final long serialVersionUID = 0L;
     @Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_NewOrder_descriptor;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.NewOrder getDefaultInstanceForType() {
-      return com.tangem.blockchain.binance.proto.NewOrder.getDefaultInstance();
+    public com.tangem.blockchain.blockchains.binance.proto.NewOrder getDefaultInstanceForType() {
+      return com.tangem.blockchain.blockchains.binance.proto.NewOrder.getDefaultInstance();
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.NewOrder build() {
-      com.tangem.blockchain.binance.proto.NewOrder result = buildPartial();
+    public com.tangem.blockchain.blockchains.binance.proto.NewOrder build() {
+      com.tangem.blockchain.blockchains.binance.proto.NewOrder result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -602,8 +602,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.NewOrder buildPartial() {
-      com.tangem.blockchain.binance.proto.NewOrder result = new com.tangem.blockchain.binance.proto.NewOrder(this);
+    public com.tangem.blockchain.blockchains.binance.proto.NewOrder buildPartial() {
+      com.tangem.blockchain.blockchains.binance.proto.NewOrder result = new com.tangem.blockchain.blockchains.binance.proto.NewOrder(this);
       result.sender_ = sender_;
       result.id_ = id_;
       result.symbol_ = symbol_;
@@ -650,16 +650,16 @@ private static final long serialVersionUID = 0L;
     }
     @Override
     public Builder mergeFrom(com.google.protobuf.Message other) {
-      if (other instanceof com.tangem.blockchain.binance.proto.NewOrder) {
-        return mergeFrom((com.tangem.blockchain.binance.proto.NewOrder)other);
+      if (other instanceof com.tangem.blockchain.blockchains.binance.proto.NewOrder) {
+        return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.NewOrder)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tangem.blockchain.binance.proto.NewOrder other) {
-      if (other == com.tangem.blockchain.binance.proto.NewOrder.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.NewOrder other) {
+      if (other == com.tangem.blockchain.blockchains.binance.proto.NewOrder.getDefaultInstance()) return this;
       if (other.getSender() != com.google.protobuf.ByteString.EMPTY) {
         setSender(other.getSender());
       }
@@ -701,11 +701,11 @@ private static final long serialVersionUID = 0L;
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      com.tangem.blockchain.binance.proto.NewOrder parsedMessage = null;
+      com.tangem.blockchain.blockchains.binance.proto.NewOrder parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tangem.blockchain.binance.proto.NewOrder) e.getUnfinishedMessage();
+        parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.NewOrder) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -1140,12 +1140,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:transaction.NewOrder)
-  private static final com.tangem.blockchain.binance.proto.NewOrder DEFAULT_INSTANCE;
+  private static final com.tangem.blockchain.blockchains.binance.proto.NewOrder DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.NewOrder();
+    DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.NewOrder();
   }
 
-  public static com.tangem.blockchain.binance.proto.NewOrder getDefaultInstance() {
+  public static com.tangem.blockchain.blockchains.binance.proto.NewOrder getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -1170,7 +1170,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @Override
-  public com.tangem.blockchain.binance.proto.NewOrder getDefaultInstanceForType() {
+  public com.tangem.blockchain.blockchains.binance.proto.NewOrder getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrderOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrderOrBuilder.java
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrderOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrderOrBuilder.java
index 90cc743439..42c4c45549 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/NewOrderOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/NewOrderOrBuilder.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 public interface NewOrderOrBuilder extends
     // @@protoc_insertion_point(interface_extends:transaction.NewOrder)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/Send.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Send.java
similarity index 75%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/Send.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Send.java
index b5b491d6ac..6a8d21f1f9 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/Send.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Send.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 /**
  * 
@@ -50,20 +50,20 @@ private static final long serialVersionUID = 0L;
             break;
           case 10: {
             if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-              inputs_ = new java.util.ArrayList();
+              inputs_ = new java.util.ArrayList();
               mutable_bitField0_ |= 0x00000001;
             }
             inputs_.add(
-                input.readMessage(com.tangem.blockchain.binance.proto.Send.Input.parser(), extensionRegistry));
+                input.readMessage(com.tangem.blockchain.blockchains.binance.proto.Send.Input.parser(), extensionRegistry));
             break;
           }
           case 18: {
             if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-              outputs_ = new java.util.ArrayList();
+              outputs_ = new java.util.ArrayList();
               mutable_bitField0_ |= 0x00000002;
             }
             outputs_.add(
-                input.readMessage(com.tangem.blockchain.binance.proto.Send.Output.parser(), extensionRegistry));
+                input.readMessage(com.tangem.blockchain.blockchains.binance.proto.Send.Output.parser(), extensionRegistry));
             break;
           }
           default: {
@@ -93,15 +93,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
   }
 
   @Override
   protected FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_fieldAccessorTable
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tangem.blockchain.binance.proto.Send.class, com.tangem.blockchain.binance.proto.Send.Builder.class);
+            com.tangem.blockchain.blockchains.binance.proto.Send.class, com.tangem.blockchain.blockchains.binance.proto.Send.Builder.class);
   }
 
   public interface TokenOrBuilder extends
@@ -199,15 +199,15 @@ private static final long serialVersionUID = 0L;
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.Send.Token.class, com.tangem.blockchain.binance.proto.Send.Token.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.Send.Token.class, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder.class);
     }
 
     public static final int DENOM_FIELD_NUMBER = 1;
@@ -299,10 +299,10 @@ private static final long serialVersionUID = 0L;
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof com.tangem.blockchain.binance.proto.Send.Token)) {
+      if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Token)) {
         return super.equals(obj);
       }
-      com.tangem.blockchain.binance.proto.Send.Token other = (com.tangem.blockchain.binance.proto.Send.Token) obj;
+      com.tangem.blockchain.blockchains.binance.proto.Send.Token other = (com.tangem.blockchain.blockchains.binance.proto.Send.Token) obj;
 
       if (!getDenom()
           .equals(other.getDenom())) return false;
@@ -329,69 +329,69 @@ private static final long serialVersionUID = 0L;
       return hash;
     }
 
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(byte[] data)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(java.io.InputStream input)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseDelimitedFrom(java.io.InputStream input)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseDelimitedFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Token parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -404,7 +404,7 @@ private static final long serialVersionUID = 0L;
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(com.tangem.blockchain.binance.proto.Send.Token prototype) {
+    public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.Send.Token prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @Override
@@ -429,21 +429,21 @@ private static final long serialVersionUID = 0L;
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder implements
         // @@protoc_insertion_point(builder_implements:transaction.Send.Token)
-        com.tangem.blockchain.binance.proto.Send.TokenOrBuilder {
+        com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
       }
 
       @Override
       protected FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_fieldAccessorTable
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                com.tangem.blockchain.binance.proto.Send.Token.class, com.tangem.blockchain.binance.proto.Send.Token.Builder.class);
+                com.tangem.blockchain.blockchains.binance.proto.Send.Token.class, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder.class);
       }
 
-      // Construct using com.tangem.blockchain.binance.proto.Send.Token.newBuilder()
+      // Construct using com.tangem.blockchain.blockchains.binance.proto.Send.Token.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -471,17 +471,17 @@ private static final long serialVersionUID = 0L;
       @Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Token_descriptor;
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Token getDefaultInstanceForType() {
-        return com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance();
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token getDefaultInstanceForType() {
+        return com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance();
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Token build() {
-        com.tangem.blockchain.binance.proto.Send.Token result = buildPartial();
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token build() {
+        com.tangem.blockchain.blockchains.binance.proto.Send.Token result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -489,8 +489,8 @@ private static final long serialVersionUID = 0L;
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Token buildPartial() {
-        com.tangem.blockchain.binance.proto.Send.Token result = new com.tangem.blockchain.binance.proto.Send.Token(this);
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token buildPartial() {
+        com.tangem.blockchain.blockchains.binance.proto.Send.Token result = new com.tangem.blockchain.blockchains.binance.proto.Send.Token(this);
         result.denom_ = denom_;
         result.amount_ = amount_;
         onBuilt();
@@ -531,16 +531,16 @@ private static final long serialVersionUID = 0L;
       }
       @Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.tangem.blockchain.binance.proto.Send.Token) {
-          return mergeFrom((com.tangem.blockchain.binance.proto.Send.Token)other);
+        if (other instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Token) {
+          return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.Send.Token)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(com.tangem.blockchain.binance.proto.Send.Token other) {
-        if (other == com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.Send.Token other) {
+        if (other == com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance()) return this;
         if (!other.getDenom().isEmpty()) {
           denom_ = other.denom_;
           onChanged();
@@ -563,11 +563,11 @@ private static final long serialVersionUID = 0L;
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.tangem.blockchain.binance.proto.Send.Token parsedMessage = null;
+        com.tangem.blockchain.blockchains.binance.proto.Send.Token parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (com.tangem.blockchain.binance.proto.Send.Token) e.getUnfinishedMessage();
+          parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.Send.Token) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -688,12 +688,12 @@ private static final long serialVersionUID = 0L;
     }
 
     // @@protoc_insertion_point(class_scope:transaction.Send.Token)
-    private static final com.tangem.blockchain.binance.proto.Send.Token DEFAULT_INSTANCE;
+    private static final com.tangem.blockchain.blockchains.binance.proto.Send.Token DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.Send.Token();
+      DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.Send.Token();
     }
 
-    public static com.tangem.blockchain.binance.proto.Send.Token getDefaultInstance() {
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Token getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
@@ -718,7 +718,7 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.Send.Token getDefaultInstanceForType() {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Token getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -736,12 +736,12 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    java.util.List
+    java.util.List
         getCoinsList();
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    com.tangem.blockchain.binance.proto.Send.Token getCoins(int index);
+    com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index);
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
@@ -749,12 +749,12 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    java.util.List
+    java.util.List
         getCoinsOrBuilderList();
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+    com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
             int index);
   }
   /**
@@ -805,11 +805,11 @@ private static final long serialVersionUID = 0L;
             }
             case 18: {
               if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                coins_ = new java.util.ArrayList();
+                coins_ = new java.util.ArrayList();
                 mutable_bitField0_ |= 0x00000002;
               }
               coins_.add(
-                  input.readMessage(com.tangem.blockchain.binance.proto.Send.Token.parser(), extensionRegistry));
+                  input.readMessage(com.tangem.blockchain.blockchains.binance.proto.Send.Token.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -836,15 +836,15 @@ private static final long serialVersionUID = 0L;
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.Send.Input.class, com.tangem.blockchain.binance.proto.Send.Input.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.Send.Input.class, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder.class);
     }
 
     private int bitField0_;
@@ -858,17 +858,17 @@ private static final long serialVersionUID = 0L;
     }
 
     public static final int COINS_FIELD_NUMBER = 2;
-    private java.util.List coins_;
+    private java.util.List coins_;
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    public java.util.List getCoinsList() {
+    public java.util.List getCoinsList() {
       return coins_;
     }
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    public java.util.List
+    public java.util.List
         getCoinsOrBuilderList() {
       return coins_;
     }
@@ -881,13 +881,13 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.Token getCoins(int index) {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index) {
       return coins_.get(index);
     }
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+    public com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
         int index) {
       return coins_.get(index);
     }
@@ -939,10 +939,10 @@ private static final long serialVersionUID = 0L;
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof com.tangem.blockchain.binance.proto.Send.Input)) {
+      if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Input)) {
         return super.equals(obj);
       }
-      com.tangem.blockchain.binance.proto.Send.Input other = (com.tangem.blockchain.binance.proto.Send.Input) obj;
+      com.tangem.blockchain.blockchains.binance.proto.Send.Input other = (com.tangem.blockchain.blockchains.binance.proto.Send.Input) obj;
 
       if (!getAddress()
           .equals(other.getAddress())) return false;
@@ -970,69 +970,69 @@ private static final long serialVersionUID = 0L;
       return hash;
     }
 
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(byte[] data)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(java.io.InputStream input)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseDelimitedFrom(java.io.InputStream input)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseDelimitedFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Input parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -1045,7 +1045,7 @@ private static final long serialVersionUID = 0L;
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(com.tangem.blockchain.binance.proto.Send.Input prototype) {
+    public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.Send.Input prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @Override
@@ -1066,21 +1066,21 @@ private static final long serialVersionUID = 0L;
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder implements
         // @@protoc_insertion_point(builder_implements:transaction.Send.Input)
-        com.tangem.blockchain.binance.proto.Send.InputOrBuilder {
+        com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
       }
 
       @Override
       protected FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_fieldAccessorTable
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                com.tangem.blockchain.binance.proto.Send.Input.class, com.tangem.blockchain.binance.proto.Send.Input.Builder.class);
+                com.tangem.blockchain.blockchains.binance.proto.Send.Input.class, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder.class);
       }
 
-      // Construct using com.tangem.blockchain.binance.proto.Send.Input.newBuilder()
+      // Construct using com.tangem.blockchain.blockchains.binance.proto.Send.Input.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -1113,17 +1113,17 @@ private static final long serialVersionUID = 0L;
       @Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Input_descriptor;
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Input getDefaultInstanceForType() {
-        return com.tangem.blockchain.binance.proto.Send.Input.getDefaultInstance();
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Input getDefaultInstanceForType() {
+        return com.tangem.blockchain.blockchains.binance.proto.Send.Input.getDefaultInstance();
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Input build() {
-        com.tangem.blockchain.binance.proto.Send.Input result = buildPartial();
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Input build() {
+        com.tangem.blockchain.blockchains.binance.proto.Send.Input result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -1131,8 +1131,8 @@ private static final long serialVersionUID = 0L;
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Input buildPartial() {
-        com.tangem.blockchain.binance.proto.Send.Input result = new com.tangem.blockchain.binance.proto.Send.Input(this);
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Input buildPartial() {
+        com.tangem.blockchain.blockchains.binance.proto.Send.Input result = new com.tangem.blockchain.blockchains.binance.proto.Send.Input(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         result.address_ = address_;
@@ -1184,16 +1184,16 @@ private static final long serialVersionUID = 0L;
       }
       @Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.tangem.blockchain.binance.proto.Send.Input) {
-          return mergeFrom((com.tangem.blockchain.binance.proto.Send.Input)other);
+        if (other instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Input) {
+          return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.Send.Input)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(com.tangem.blockchain.binance.proto.Send.Input other) {
-        if (other == com.tangem.blockchain.binance.proto.Send.Input.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.Send.Input other) {
+        if (other == com.tangem.blockchain.blockchains.binance.proto.Send.Input.getDefaultInstance()) return this;
         if (other.getAddress() != com.google.protobuf.ByteString.EMPTY) {
           setAddress(other.getAddress());
         }
@@ -1238,11 +1238,11 @@ private static final long serialVersionUID = 0L;
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.tangem.blockchain.binance.proto.Send.Input parsedMessage = null;
+        com.tangem.blockchain.blockchains.binance.proto.Send.Input parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (com.tangem.blockchain.binance.proto.Send.Input) e.getUnfinishedMessage();
+          parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.Send.Input) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -1282,22 +1282,22 @@ private static final long serialVersionUID = 0L;
         return this;
       }
 
-      private java.util.List coins_ =
+      private java.util.List coins_ =
         java.util.Collections.emptyList();
       private void ensureCoinsIsMutable() {
         if (!((bitField0_ & 0x00000002) != 0)) {
-          coins_ = new java.util.ArrayList(coins_);
+          coins_ = new java.util.ArrayList(coins_);
           bitField0_ |= 0x00000002;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder> coinsBuilder_;
+          com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder> coinsBuilder_;
 
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public java.util.List getCoinsList() {
+      public java.util.List getCoinsList() {
         if (coinsBuilder_ == null) {
           return java.util.Collections.unmodifiableList(coins_);
         } else {
@@ -1317,7 +1317,7 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.Token getCoins(int index) {
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index) {
         if (coinsBuilder_ == null) {
           return coins_.get(index);
         } else {
@@ -1328,7 +1328,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder setCoins(
-          int index, com.tangem.blockchain.binance.proto.Send.Token value) {
+          int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
         if (coinsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -1345,7 +1345,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder setCoins(
-          int index, com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+          int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
         if (coinsBuilder_ == null) {
           ensureCoinsIsMutable();
           coins_.set(index, builderForValue.build());
@@ -1358,7 +1358,7 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public Builder addCoins(com.tangem.blockchain.binance.proto.Send.Token value) {
+      public Builder addCoins(com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
         if (coinsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -1375,7 +1375,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder addCoins(
-          int index, com.tangem.blockchain.binance.proto.Send.Token value) {
+          int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
         if (coinsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -1392,7 +1392,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder addCoins(
-          com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+          com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
         if (coinsBuilder_ == null) {
           ensureCoinsIsMutable();
           coins_.add(builderForValue.build());
@@ -1406,7 +1406,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder addCoins(
-          int index, com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+          int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
         if (coinsBuilder_ == null) {
           ensureCoinsIsMutable();
           coins_.add(index, builderForValue.build());
@@ -1420,7 +1420,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder addAllCoins(
-          Iterable values) {
+          Iterable values) {
         if (coinsBuilder_ == null) {
           ensureCoinsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -1460,14 +1460,14 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.Token.Builder getCoinsBuilder(
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder getCoinsBuilder(
           int index) {
         return getCoinsFieldBuilder().getBuilder(index);
       }
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+      public com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
           int index) {
         if (coinsBuilder_ == null) {
           return coins_.get(index);  } else {
@@ -1477,7 +1477,7 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public java.util.List
+      public java.util.List
            getCoinsOrBuilderList() {
         if (coinsBuilder_ != null) {
           return coinsBuilder_.getMessageOrBuilderList();
@@ -1488,31 +1488,31 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.Token.Builder addCoinsBuilder() {
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder addCoinsBuilder() {
         return getCoinsFieldBuilder().addBuilder(
-            com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance());
+            com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance());
       }
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.Token.Builder addCoinsBuilder(
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder addCoinsBuilder(
           int index) {
         return getCoinsFieldBuilder().addBuilder(
-            index, com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance());
+            index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance());
       }
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public java.util.List
+      public java.util.List
            getCoinsBuilderList() {
         return getCoinsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+          com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
           getCoinsFieldBuilder() {
         if (coinsBuilder_ == null) {
           coinsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>(
+              com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>(
                   coins_,
                   ((bitField0_ & 0x00000002) != 0),
                   getParentForChildren(),
@@ -1538,12 +1538,12 @@ private static final long serialVersionUID = 0L;
     }
 
     // @@protoc_insertion_point(class_scope:transaction.Send.Input)
-    private static final com.tangem.blockchain.binance.proto.Send.Input DEFAULT_INSTANCE;
+    private static final com.tangem.blockchain.blockchains.binance.proto.Send.Input DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.Send.Input();
+      DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.Send.Input();
     }
 
-    public static com.tangem.blockchain.binance.proto.Send.Input getDefaultInstance() {
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Input getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
@@ -1568,7 +1568,7 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.Send.Input getDefaultInstanceForType() {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Input getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -1586,12 +1586,12 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    java.util.List
+    java.util.List
         getCoinsList();
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    com.tangem.blockchain.binance.proto.Send.Token getCoins(int index);
+    com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index);
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
@@ -1599,12 +1599,12 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    java.util.List
+    java.util.List
         getCoinsOrBuilderList();
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+    com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
             int index);
   }
   /**
@@ -1655,11 +1655,11 @@ private static final long serialVersionUID = 0L;
             }
             case 18: {
               if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                coins_ = new java.util.ArrayList();
+                coins_ = new java.util.ArrayList();
                 mutable_bitField0_ |= 0x00000002;
               }
               coins_.add(
-                  input.readMessage(com.tangem.blockchain.binance.proto.Send.Token.parser(), extensionRegistry));
+                  input.readMessage(com.tangem.blockchain.blockchains.binance.proto.Send.Token.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -1686,15 +1686,15 @@ private static final long serialVersionUID = 0L;
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.Send.Output.class, com.tangem.blockchain.binance.proto.Send.Output.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.Send.Output.class, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder.class);
     }
 
     private int bitField0_;
@@ -1708,17 +1708,17 @@ private static final long serialVersionUID = 0L;
     }
 
     public static final int COINS_FIELD_NUMBER = 2;
-    private java.util.List coins_;
+    private java.util.List coins_;
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    public java.util.List getCoinsList() {
+    public java.util.List getCoinsList() {
       return coins_;
     }
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    public java.util.List
+    public java.util.List
         getCoinsOrBuilderList() {
       return coins_;
     }
@@ -1731,13 +1731,13 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.Token getCoins(int index) {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index) {
       return coins_.get(index);
     }
     /**
      * repeated .transaction.Send.Token coins = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+    public com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
         int index) {
       return coins_.get(index);
     }
@@ -1789,10 +1789,10 @@ private static final long serialVersionUID = 0L;
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof com.tangem.blockchain.binance.proto.Send.Output)) {
+      if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Output)) {
         return super.equals(obj);
       }
-      com.tangem.blockchain.binance.proto.Send.Output other = (com.tangem.blockchain.binance.proto.Send.Output) obj;
+      com.tangem.blockchain.blockchains.binance.proto.Send.Output other = (com.tangem.blockchain.blockchains.binance.proto.Send.Output) obj;
 
       if (!getAddress()
           .equals(other.getAddress())) return false;
@@ -1820,69 +1820,69 @@ private static final long serialVersionUID = 0L;
       return hash;
     }
 
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(byte[] data)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(java.io.InputStream input)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseDelimitedFrom(java.io.InputStream input)
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseDelimitedFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.Send.Output parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -1895,7 +1895,7 @@ private static final long serialVersionUID = 0L;
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(com.tangem.blockchain.binance.proto.Send.Output prototype) {
+    public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.Send.Output prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @Override
@@ -1916,21 +1916,21 @@ private static final long serialVersionUID = 0L;
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder implements
         // @@protoc_insertion_point(builder_implements:transaction.Send.Output)
-        com.tangem.blockchain.binance.proto.Send.OutputOrBuilder {
+        com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
       }
 
       @Override
       protected FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_fieldAccessorTable
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                com.tangem.blockchain.binance.proto.Send.Output.class, com.tangem.blockchain.binance.proto.Send.Output.Builder.class);
+                com.tangem.blockchain.blockchains.binance.proto.Send.Output.class, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder.class);
       }
 
-      // Construct using com.tangem.blockchain.binance.proto.Send.Output.newBuilder()
+      // Construct using com.tangem.blockchain.blockchains.binance.proto.Send.Output.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -1963,17 +1963,17 @@ private static final long serialVersionUID = 0L;
       @Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_Output_descriptor;
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Output getDefaultInstanceForType() {
-        return com.tangem.blockchain.binance.proto.Send.Output.getDefaultInstance();
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Output getDefaultInstanceForType() {
+        return com.tangem.blockchain.blockchains.binance.proto.Send.Output.getDefaultInstance();
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Output build() {
-        com.tangem.blockchain.binance.proto.Send.Output result = buildPartial();
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Output build() {
+        com.tangem.blockchain.blockchains.binance.proto.Send.Output result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -1981,8 +1981,8 @@ private static final long serialVersionUID = 0L;
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.Send.Output buildPartial() {
-        com.tangem.blockchain.binance.proto.Send.Output result = new com.tangem.blockchain.binance.proto.Send.Output(this);
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Output buildPartial() {
+        com.tangem.blockchain.blockchains.binance.proto.Send.Output result = new com.tangem.blockchain.blockchains.binance.proto.Send.Output(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         result.address_ = address_;
@@ -2034,16 +2034,16 @@ private static final long serialVersionUID = 0L;
       }
       @Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.tangem.blockchain.binance.proto.Send.Output) {
-          return mergeFrom((com.tangem.blockchain.binance.proto.Send.Output)other);
+        if (other instanceof com.tangem.blockchain.blockchains.binance.proto.Send.Output) {
+          return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.Send.Output)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(com.tangem.blockchain.binance.proto.Send.Output other) {
-        if (other == com.tangem.blockchain.binance.proto.Send.Output.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.Send.Output other) {
+        if (other == com.tangem.blockchain.blockchains.binance.proto.Send.Output.getDefaultInstance()) return this;
         if (other.getAddress() != com.google.protobuf.ByteString.EMPTY) {
           setAddress(other.getAddress());
         }
@@ -2088,11 +2088,11 @@ private static final long serialVersionUID = 0L;
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.tangem.blockchain.binance.proto.Send.Output parsedMessage = null;
+        com.tangem.blockchain.blockchains.binance.proto.Send.Output parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (com.tangem.blockchain.binance.proto.Send.Output) e.getUnfinishedMessage();
+          parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.Send.Output) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -2132,22 +2132,22 @@ private static final long serialVersionUID = 0L;
         return this;
       }
 
-      private java.util.List coins_ =
+      private java.util.List coins_ =
         java.util.Collections.emptyList();
       private void ensureCoinsIsMutable() {
         if (!((bitField0_ & 0x00000002) != 0)) {
-          coins_ = new java.util.ArrayList(coins_);
+          coins_ = new java.util.ArrayList(coins_);
           bitField0_ |= 0x00000002;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder> coinsBuilder_;
+          com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder> coinsBuilder_;
 
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public java.util.List getCoinsList() {
+      public java.util.List getCoinsList() {
         if (coinsBuilder_ == null) {
           return java.util.Collections.unmodifiableList(coins_);
         } else {
@@ -2167,7 +2167,7 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.Token getCoins(int index) {
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token getCoins(int index) {
         if (coinsBuilder_ == null) {
           return coins_.get(index);
         } else {
@@ -2178,7 +2178,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder setCoins(
-          int index, com.tangem.blockchain.binance.proto.Send.Token value) {
+          int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
         if (coinsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -2195,7 +2195,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder setCoins(
-          int index, com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+          int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
         if (coinsBuilder_ == null) {
           ensureCoinsIsMutable();
           coins_.set(index, builderForValue.build());
@@ -2208,7 +2208,7 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public Builder addCoins(com.tangem.blockchain.binance.proto.Send.Token value) {
+      public Builder addCoins(com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
         if (coinsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -2225,7 +2225,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder addCoins(
-          int index, com.tangem.blockchain.binance.proto.Send.Token value) {
+          int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token value) {
         if (coinsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -2242,7 +2242,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder addCoins(
-          com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+          com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
         if (coinsBuilder_ == null) {
           ensureCoinsIsMutable();
           coins_.add(builderForValue.build());
@@ -2256,7 +2256,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder addCoins(
-          int index, com.tangem.blockchain.binance.proto.Send.Token.Builder builderForValue) {
+          int index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder builderForValue) {
         if (coinsBuilder_ == null) {
           ensureCoinsIsMutable();
           coins_.add(index, builderForValue.build());
@@ -2270,7 +2270,7 @@ private static final long serialVersionUID = 0L;
        * repeated .transaction.Send.Token coins = 2;
        */
       public Builder addAllCoins(
-          Iterable values) {
+          Iterable values) {
         if (coinsBuilder_ == null) {
           ensureCoinsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -2310,14 +2310,14 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.Token.Builder getCoinsBuilder(
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder getCoinsBuilder(
           int index) {
         return getCoinsFieldBuilder().getBuilder(index);
       }
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
+      public com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder getCoinsOrBuilder(
           int index) {
         if (coinsBuilder_ == null) {
           return coins_.get(index);  } else {
@@ -2327,7 +2327,7 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public java.util.List
+      public java.util.List
            getCoinsOrBuilderList() {
         if (coinsBuilder_ != null) {
           return coinsBuilder_.getMessageOrBuilderList();
@@ -2338,31 +2338,31 @@ private static final long serialVersionUID = 0L;
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.Token.Builder addCoinsBuilder() {
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder addCoinsBuilder() {
         return getCoinsFieldBuilder().addBuilder(
-            com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance());
+            com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance());
       }
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public com.tangem.blockchain.binance.proto.Send.Token.Builder addCoinsBuilder(
+      public com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder addCoinsBuilder(
           int index) {
         return getCoinsFieldBuilder().addBuilder(
-            index, com.tangem.blockchain.binance.proto.Send.Token.getDefaultInstance());
+            index, com.tangem.blockchain.blockchains.binance.proto.Send.Token.getDefaultInstance());
       }
       /**
        * repeated .transaction.Send.Token coins = 2;
        */
-      public java.util.List
+      public java.util.List
            getCoinsBuilderList() {
         return getCoinsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>
+          com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>
           getCoinsFieldBuilder() {
         if (coinsBuilder_ == null) {
           coinsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              com.tangem.blockchain.binance.proto.Send.Token, com.tangem.blockchain.binance.proto.Send.Token.Builder, com.tangem.blockchain.binance.proto.Send.TokenOrBuilder>(
+              com.tangem.blockchain.blockchains.binance.proto.Send.Token, com.tangem.blockchain.blockchains.binance.proto.Send.Token.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.TokenOrBuilder>(
                   coins_,
                   ((bitField0_ & 0x00000002) != 0),
                   getParentForChildren(),
@@ -2388,12 +2388,12 @@ private static final long serialVersionUID = 0L;
     }
 
     // @@protoc_insertion_point(class_scope:transaction.Send.Output)
-    private static final com.tangem.blockchain.binance.proto.Send.Output DEFAULT_INSTANCE;
+    private static final com.tangem.blockchain.blockchains.binance.proto.Send.Output DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.Send.Output();
+      DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.Send.Output();
     }
 
-    public static com.tangem.blockchain.binance.proto.Send.Output getDefaultInstance() {
+    public static com.tangem.blockchain.blockchains.binance.proto.Send.Output getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
@@ -2418,24 +2418,24 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.Send.Output getDefaultInstanceForType() {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Output getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
   public static final int INPUTS_FIELD_NUMBER = 1;
-  private java.util.List inputs_;
+  private java.util.List inputs_;
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
-  public java.util.List getInputsList() {
+  public java.util.List getInputsList() {
     return inputs_;
   }
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
-  public java.util.List
+  public java.util.List
       getInputsOrBuilderList() {
     return inputs_;
   }
@@ -2448,29 +2448,29 @@ private static final long serialVersionUID = 0L;
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
-  public com.tangem.blockchain.binance.proto.Send.Input getInputs(int index) {
+  public com.tangem.blockchain.blockchains.binance.proto.Send.Input getInputs(int index) {
     return inputs_.get(index);
   }
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
-  public com.tangem.blockchain.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
+  public com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
       int index) {
     return inputs_.get(index);
   }
 
   public static final int OUTPUTS_FIELD_NUMBER = 2;
-  private java.util.List outputs_;
+  private java.util.List outputs_;
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
-  public java.util.List getOutputsList() {
+  public java.util.List getOutputsList() {
     return outputs_;
   }
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
-  public java.util.List
+  public java.util.List
       getOutputsOrBuilderList() {
     return outputs_;
   }
@@ -2483,13 +2483,13 @@ private static final long serialVersionUID = 0L;
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
-  public com.tangem.blockchain.binance.proto.Send.Output getOutputs(int index) {
+  public com.tangem.blockchain.blockchains.binance.proto.Send.Output getOutputs(int index) {
     return outputs_.get(index);
   }
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
-  public com.tangem.blockchain.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
+  public com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
       int index) {
     return outputs_.get(index);
   }
@@ -2541,10 +2541,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tangem.blockchain.binance.proto.Send)) {
+    if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.Send)) {
       return super.equals(obj);
     }
-    com.tangem.blockchain.binance.proto.Send other = (com.tangem.blockchain.binance.proto.Send) obj;
+    com.tangem.blockchain.blockchains.binance.proto.Send other = (com.tangem.blockchain.blockchains.binance.proto.Send) obj;
 
     if (!getInputsList()
         .equals(other.getInputsList())) return false;
@@ -2574,69 +2574,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
       java.nio.ByteBuffer data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
       com.google.protobuf.ByteString data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(byte[] data)
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
       byte[] data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseDelimitedFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseDelimitedFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.Send parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.Send parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -2649,7 +2649,7 @@ private static final long serialVersionUID = 0L;
   public static Builder newBuilder() {
     return DEFAULT_INSTANCE.toBuilder();
   }
-  public static Builder newBuilder(com.tangem.blockchain.binance.proto.Send prototype) {
+  public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.Send prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @Override
@@ -2674,21 +2674,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder implements
       // @@protoc_insertion_point(builder_implements:transaction.Send)
-      com.tangem.blockchain.binance.proto.SendOrBuilder {
+      com.tangem.blockchain.blockchains.binance.proto.SendOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.Send.class, com.tangem.blockchain.binance.proto.Send.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.Send.class, com.tangem.blockchain.blockchains.binance.proto.Send.Builder.class);
     }
 
-    // Construct using com.tangem.blockchain.binance.proto.Send.newBuilder()
+    // Construct using com.tangem.blockchain.blockchains.binance.proto.Send.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -2726,17 +2726,17 @@ private static final long serialVersionUID = 0L;
     @Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_Send_descriptor;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.Send getDefaultInstanceForType() {
-      return com.tangem.blockchain.binance.proto.Send.getDefaultInstance();
+    public com.tangem.blockchain.blockchains.binance.proto.Send getDefaultInstanceForType() {
+      return com.tangem.blockchain.blockchains.binance.proto.Send.getDefaultInstance();
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.Send build() {
-      com.tangem.blockchain.binance.proto.Send result = buildPartial();
+    public com.tangem.blockchain.blockchains.binance.proto.Send build() {
+      com.tangem.blockchain.blockchains.binance.proto.Send result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -2744,8 +2744,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.Send buildPartial() {
-      com.tangem.blockchain.binance.proto.Send result = new com.tangem.blockchain.binance.proto.Send(this);
+    public com.tangem.blockchain.blockchains.binance.proto.Send buildPartial() {
+      com.tangem.blockchain.blockchains.binance.proto.Send result = new com.tangem.blockchain.blockchains.binance.proto.Send(this);
       int from_bitField0_ = bitField0_;
       if (inputsBuilder_ == null) {
         if (((bitField0_ & 0x00000001) != 0)) {
@@ -2803,16 +2803,16 @@ private static final long serialVersionUID = 0L;
     }
     @Override
     public Builder mergeFrom(com.google.protobuf.Message other) {
-      if (other instanceof com.tangem.blockchain.binance.proto.Send) {
-        return mergeFrom((com.tangem.blockchain.binance.proto.Send)other);
+      if (other instanceof com.tangem.blockchain.blockchains.binance.proto.Send) {
+        return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.Send)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tangem.blockchain.binance.proto.Send other) {
-      if (other == com.tangem.blockchain.binance.proto.Send.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.Send other) {
+      if (other == com.tangem.blockchain.blockchains.binance.proto.Send.getDefaultInstance()) return this;
       if (inputsBuilder_ == null) {
         if (!other.inputs_.isEmpty()) {
           if (inputs_.isEmpty()) {
@@ -2880,11 +2880,11 @@ private static final long serialVersionUID = 0L;
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      com.tangem.blockchain.binance.proto.Send parsedMessage = null;
+      com.tangem.blockchain.blockchains.binance.proto.Send parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tangem.blockchain.binance.proto.Send) e.getUnfinishedMessage();
+        parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.Send) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -2895,22 +2895,22 @@ private static final long serialVersionUID = 0L;
     }
     private int bitField0_;
 
-    private java.util.List inputs_ =
+    private java.util.List inputs_ =
       java.util.Collections.emptyList();
     private void ensureInputsIsMutable() {
       if (!((bitField0_ & 0x00000001) != 0)) {
-        inputs_ = new java.util.ArrayList(inputs_);
+        inputs_ = new java.util.ArrayList(inputs_);
         bitField0_ |= 0x00000001;
        }
     }
 
     private com.google.protobuf.RepeatedFieldBuilderV3<
-        com.tangem.blockchain.binance.proto.Send.Input, com.tangem.blockchain.binance.proto.Send.Input.Builder, com.tangem.blockchain.binance.proto.Send.InputOrBuilder> inputsBuilder_;
+        com.tangem.blockchain.blockchains.binance.proto.Send.Input, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder> inputsBuilder_;
 
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public java.util.List getInputsList() {
+    public java.util.List getInputsList() {
       if (inputsBuilder_ == null) {
         return java.util.Collections.unmodifiableList(inputs_);
       } else {
@@ -2930,7 +2930,7 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public com.tangem.blockchain.binance.proto.Send.Input getInputs(int index) {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Input getInputs(int index) {
       if (inputsBuilder_ == null) {
         return inputs_.get(index);
       } else {
@@ -2941,7 +2941,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Input inputs = 1;
      */
     public Builder setInputs(
-        int index, com.tangem.blockchain.binance.proto.Send.Input value) {
+        int index, com.tangem.blockchain.blockchains.binance.proto.Send.Input value) {
       if (inputsBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -2958,7 +2958,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Input inputs = 1;
      */
     public Builder setInputs(
-        int index, com.tangem.blockchain.binance.proto.Send.Input.Builder builderForValue) {
+        int index, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder builderForValue) {
       if (inputsBuilder_ == null) {
         ensureInputsIsMutable();
         inputs_.set(index, builderForValue.build());
@@ -2971,7 +2971,7 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public Builder addInputs(com.tangem.blockchain.binance.proto.Send.Input value) {
+    public Builder addInputs(com.tangem.blockchain.blockchains.binance.proto.Send.Input value) {
       if (inputsBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -2988,7 +2988,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Input inputs = 1;
      */
     public Builder addInputs(
-        int index, com.tangem.blockchain.binance.proto.Send.Input value) {
+        int index, com.tangem.blockchain.blockchains.binance.proto.Send.Input value) {
       if (inputsBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -3005,7 +3005,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Input inputs = 1;
      */
     public Builder addInputs(
-        com.tangem.blockchain.binance.proto.Send.Input.Builder builderForValue) {
+        com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder builderForValue) {
       if (inputsBuilder_ == null) {
         ensureInputsIsMutable();
         inputs_.add(builderForValue.build());
@@ -3019,7 +3019,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Input inputs = 1;
      */
     public Builder addInputs(
-        int index, com.tangem.blockchain.binance.proto.Send.Input.Builder builderForValue) {
+        int index, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder builderForValue) {
       if (inputsBuilder_ == null) {
         ensureInputsIsMutable();
         inputs_.add(index, builderForValue.build());
@@ -3033,7 +3033,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Input inputs = 1;
      */
     public Builder addAllInputs(
-        Iterable values) {
+        Iterable values) {
       if (inputsBuilder_ == null) {
         ensureInputsIsMutable();
         com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -3073,14 +3073,14 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public com.tangem.blockchain.binance.proto.Send.Input.Builder getInputsBuilder(
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder getInputsBuilder(
         int index) {
       return getInputsFieldBuilder().getBuilder(index);
     }
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public com.tangem.blockchain.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
+    public com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
         int index) {
       if (inputsBuilder_ == null) {
         return inputs_.get(index);  } else {
@@ -3090,7 +3090,7 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public java.util.List
+    public java.util.List
          getInputsOrBuilderList() {
       if (inputsBuilder_ != null) {
         return inputsBuilder_.getMessageOrBuilderList();
@@ -3101,31 +3101,31 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public com.tangem.blockchain.binance.proto.Send.Input.Builder addInputsBuilder() {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder addInputsBuilder() {
       return getInputsFieldBuilder().addBuilder(
-          com.tangem.blockchain.binance.proto.Send.Input.getDefaultInstance());
+          com.tangem.blockchain.blockchains.binance.proto.Send.Input.getDefaultInstance());
     }
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public com.tangem.blockchain.binance.proto.Send.Input.Builder addInputsBuilder(
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder addInputsBuilder(
         int index) {
       return getInputsFieldBuilder().addBuilder(
-          index, com.tangem.blockchain.binance.proto.Send.Input.getDefaultInstance());
+          index, com.tangem.blockchain.blockchains.binance.proto.Send.Input.getDefaultInstance());
     }
     /**
      * repeated .transaction.Send.Input inputs = 1;
      */
-    public java.util.List
+    public java.util.List
          getInputsBuilderList() {
       return getInputsFieldBuilder().getBuilderList();
     }
     private com.google.protobuf.RepeatedFieldBuilderV3<
-        com.tangem.blockchain.binance.proto.Send.Input, com.tangem.blockchain.binance.proto.Send.Input.Builder, com.tangem.blockchain.binance.proto.Send.InputOrBuilder>
+        com.tangem.blockchain.blockchains.binance.proto.Send.Input, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder>
         getInputsFieldBuilder() {
       if (inputsBuilder_ == null) {
         inputsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-            com.tangem.blockchain.binance.proto.Send.Input, com.tangem.blockchain.binance.proto.Send.Input.Builder, com.tangem.blockchain.binance.proto.Send.InputOrBuilder>(
+            com.tangem.blockchain.blockchains.binance.proto.Send.Input, com.tangem.blockchain.blockchains.binance.proto.Send.Input.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder>(
                 inputs_,
                 ((bitField0_ & 0x00000001) != 0),
                 getParentForChildren(),
@@ -3135,22 +3135,22 @@ private static final long serialVersionUID = 0L;
       return inputsBuilder_;
     }
 
-    private java.util.List outputs_ =
+    private java.util.List outputs_ =
       java.util.Collections.emptyList();
     private void ensureOutputsIsMutable() {
       if (!((bitField0_ & 0x00000002) != 0)) {
-        outputs_ = new java.util.ArrayList(outputs_);
+        outputs_ = new java.util.ArrayList(outputs_);
         bitField0_ |= 0x00000002;
        }
     }
 
     private com.google.protobuf.RepeatedFieldBuilderV3<
-        com.tangem.blockchain.binance.proto.Send.Output, com.tangem.blockchain.binance.proto.Send.Output.Builder, com.tangem.blockchain.binance.proto.Send.OutputOrBuilder> outputsBuilder_;
+        com.tangem.blockchain.blockchains.binance.proto.Send.Output, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder> outputsBuilder_;
 
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public java.util.List getOutputsList() {
+    public java.util.List getOutputsList() {
       if (outputsBuilder_ == null) {
         return java.util.Collections.unmodifiableList(outputs_);
       } else {
@@ -3170,7 +3170,7 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.Output getOutputs(int index) {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Output getOutputs(int index) {
       if (outputsBuilder_ == null) {
         return outputs_.get(index);
       } else {
@@ -3181,7 +3181,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Output outputs = 2;
      */
     public Builder setOutputs(
-        int index, com.tangem.blockchain.binance.proto.Send.Output value) {
+        int index, com.tangem.blockchain.blockchains.binance.proto.Send.Output value) {
       if (outputsBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -3198,7 +3198,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Output outputs = 2;
      */
     public Builder setOutputs(
-        int index, com.tangem.blockchain.binance.proto.Send.Output.Builder builderForValue) {
+        int index, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder builderForValue) {
       if (outputsBuilder_ == null) {
         ensureOutputsIsMutable();
         outputs_.set(index, builderForValue.build());
@@ -3211,7 +3211,7 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public Builder addOutputs(com.tangem.blockchain.binance.proto.Send.Output value) {
+    public Builder addOutputs(com.tangem.blockchain.blockchains.binance.proto.Send.Output value) {
       if (outputsBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -3228,7 +3228,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Output outputs = 2;
      */
     public Builder addOutputs(
-        int index, com.tangem.blockchain.binance.proto.Send.Output value) {
+        int index, com.tangem.blockchain.blockchains.binance.proto.Send.Output value) {
       if (outputsBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -3245,7 +3245,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Output outputs = 2;
      */
     public Builder addOutputs(
-        com.tangem.blockchain.binance.proto.Send.Output.Builder builderForValue) {
+        com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder builderForValue) {
       if (outputsBuilder_ == null) {
         ensureOutputsIsMutable();
         outputs_.add(builderForValue.build());
@@ -3259,7 +3259,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Output outputs = 2;
      */
     public Builder addOutputs(
-        int index, com.tangem.blockchain.binance.proto.Send.Output.Builder builderForValue) {
+        int index, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder builderForValue) {
       if (outputsBuilder_ == null) {
         ensureOutputsIsMutable();
         outputs_.add(index, builderForValue.build());
@@ -3273,7 +3273,7 @@ private static final long serialVersionUID = 0L;
      * repeated .transaction.Send.Output outputs = 2;
      */
     public Builder addAllOutputs(
-        Iterable values) {
+        Iterable values) {
       if (outputsBuilder_ == null) {
         ensureOutputsIsMutable();
         com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -3313,14 +3313,14 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.Output.Builder getOutputsBuilder(
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder getOutputsBuilder(
         int index) {
       return getOutputsFieldBuilder().getBuilder(index);
     }
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
+    public com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
         int index) {
       if (outputsBuilder_ == null) {
         return outputs_.get(index);  } else {
@@ -3330,7 +3330,7 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public java.util.List
+    public java.util.List
          getOutputsOrBuilderList() {
       if (outputsBuilder_ != null) {
         return outputsBuilder_.getMessageOrBuilderList();
@@ -3341,31 +3341,31 @@ private static final long serialVersionUID = 0L;
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.Output.Builder addOutputsBuilder() {
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder addOutputsBuilder() {
       return getOutputsFieldBuilder().addBuilder(
-          com.tangem.blockchain.binance.proto.Send.Output.getDefaultInstance());
+          com.tangem.blockchain.blockchains.binance.proto.Send.Output.getDefaultInstance());
     }
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public com.tangem.blockchain.binance.proto.Send.Output.Builder addOutputsBuilder(
+    public com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder addOutputsBuilder(
         int index) {
       return getOutputsFieldBuilder().addBuilder(
-          index, com.tangem.blockchain.binance.proto.Send.Output.getDefaultInstance());
+          index, com.tangem.blockchain.blockchains.binance.proto.Send.Output.getDefaultInstance());
     }
     /**
      * repeated .transaction.Send.Output outputs = 2;
      */
-    public java.util.List
+    public java.util.List
          getOutputsBuilderList() {
       return getOutputsFieldBuilder().getBuilderList();
     }
     private com.google.protobuf.RepeatedFieldBuilderV3<
-        com.tangem.blockchain.binance.proto.Send.Output, com.tangem.blockchain.binance.proto.Send.Output.Builder, com.tangem.blockchain.binance.proto.Send.OutputOrBuilder>
+        com.tangem.blockchain.blockchains.binance.proto.Send.Output, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder>
         getOutputsFieldBuilder() {
       if (outputsBuilder_ == null) {
         outputsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-            com.tangem.blockchain.binance.proto.Send.Output, com.tangem.blockchain.binance.proto.Send.Output.Builder, com.tangem.blockchain.binance.proto.Send.OutputOrBuilder>(
+            com.tangem.blockchain.blockchains.binance.proto.Send.Output, com.tangem.blockchain.blockchains.binance.proto.Send.Output.Builder, com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder>(
                 outputs_,
                 ((bitField0_ & 0x00000002) != 0),
                 getParentForChildren(),
@@ -3391,12 +3391,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:transaction.Send)
-  private static final com.tangem.blockchain.binance.proto.Send DEFAULT_INSTANCE;
+  private static final com.tangem.blockchain.blockchains.binance.proto.Send DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.Send();
+    DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.Send();
   }
 
-  public static com.tangem.blockchain.binance.proto.Send getDefaultInstance() {
+  public static com.tangem.blockchain.blockchains.binance.proto.Send getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -3421,7 +3421,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @Override
-  public com.tangem.blockchain.binance.proto.Send getDefaultInstanceForType() {
+  public com.tangem.blockchain.blockchains.binance.proto.Send getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/SendOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/SendOrBuilder.java
similarity index 61%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/SendOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/SendOrBuilder.java
index 3b619425a2..326ab8de28 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/SendOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/SendOrBuilder.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 public interface SendOrBuilder extends
     // @@protoc_insertion_point(interface_extends:transaction.Send)
@@ -10,12 +10,12 @@ public interface SendOrBuilder extends
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
-  java.util.List
+  java.util.List
       getInputsList();
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
-  com.tangem.blockchain.binance.proto.Send.Input getInputs(int index);
+  com.tangem.blockchain.blockchains.binance.proto.Send.Input getInputs(int index);
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
@@ -23,23 +23,23 @@ public interface SendOrBuilder extends
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
-  java.util.List
+  java.util.List
       getInputsOrBuilderList();
   /**
    * repeated .transaction.Send.Input inputs = 1;
    */
-  com.tangem.blockchain.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
+  com.tangem.blockchain.blockchains.binance.proto.Send.InputOrBuilder getInputsOrBuilder(
           int index);
 
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
-  java.util.List
+  java.util.List
       getOutputsList();
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
-  com.tangem.blockchain.binance.proto.Send.Output getOutputs(int index);
+  com.tangem.blockchain.blockchains.binance.proto.Send.Output getOutputs(int index);
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
@@ -47,11 +47,11 @@ public interface SendOrBuilder extends
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
-  java.util.List
+  java.util.List
       getOutputsOrBuilderList();
   /**
    * repeated .transaction.Send.Output outputs = 2;
    */
-  com.tangem.blockchain.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
+  com.tangem.blockchain.blockchains.binance.proto.Send.OutputOrBuilder getOutputsOrBuilder(
           int index);
 }
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignature.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignature.java
similarity index 77%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignature.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignature.java
index a47f46f543..1cadb9f802 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignature.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignature.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 /**
  * Protobuf type {@code transaction.StdSignature}
@@ -85,15 +85,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
   }
 
   @Override
   protected FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_fieldAccessorTable
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tangem.blockchain.binance.proto.StdSignature.class, com.tangem.blockchain.binance.proto.StdSignature.Builder.class);
+            com.tangem.blockchain.blockchains.binance.proto.StdSignature.class, com.tangem.blockchain.blockchains.binance.proto.StdSignature.Builder.class);
   }
 
   public interface PubKeyOrBuilder extends
@@ -163,15 +163,15 @@ private static final long serialVersionUID = 0L;
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.StdSignature.PubKey.class, com.tangem.blockchain.binance.proto.StdSignature.PubKey.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.class, com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.Builder.class);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -207,10 +207,10 @@ private static final long serialVersionUID = 0L;
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof com.tangem.blockchain.binance.proto.StdSignature.PubKey)) {
+      if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey)) {
         return super.equals(obj);
       }
-      com.tangem.blockchain.binance.proto.StdSignature.PubKey other = (com.tangem.blockchain.binance.proto.StdSignature.PubKey) obj;
+      com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey other = (com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey) obj;
 
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -228,69 +228,69 @@ private static final long serialVersionUID = 0L;
       return hash;
     }
 
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(byte[] data)
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(java.io.InputStream input)
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseDelimitedFrom(java.io.InputStream input)
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseDelimitedFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey parseFrom(
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -303,7 +303,7 @@ private static final long serialVersionUID = 0L;
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(com.tangem.blockchain.binance.proto.StdSignature.PubKey prototype) {
+    public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @Override
@@ -328,21 +328,21 @@ private static final long serialVersionUID = 0L;
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder implements
         // @@protoc_insertion_point(builder_implements:transaction.StdSignature.PubKey)
-        com.tangem.blockchain.binance.proto.StdSignature.PubKeyOrBuilder {
+        com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKeyOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
       }
 
       @Override
       protected FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_fieldAccessorTable
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                com.tangem.blockchain.binance.proto.StdSignature.PubKey.class, com.tangem.blockchain.binance.proto.StdSignature.PubKey.Builder.class);
+                com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.class, com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.Builder.class);
       }
 
-      // Construct using com.tangem.blockchain.binance.proto.StdSignature.PubKey.newBuilder()
+      // Construct using com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -366,17 +366,17 @@ private static final long serialVersionUID = 0L;
       @Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
+        return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_PubKey_descriptor;
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.StdSignature.PubKey getDefaultInstanceForType() {
-        return com.tangem.blockchain.binance.proto.StdSignature.PubKey.getDefaultInstance();
+      public com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey getDefaultInstanceForType() {
+        return com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.getDefaultInstance();
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.StdSignature.PubKey build() {
-        com.tangem.blockchain.binance.proto.StdSignature.PubKey result = buildPartial();
+      public com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey build() {
+        com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -384,8 +384,8 @@ private static final long serialVersionUID = 0L;
       }
 
       @Override
-      public com.tangem.blockchain.binance.proto.StdSignature.PubKey buildPartial() {
-        com.tangem.blockchain.binance.proto.StdSignature.PubKey result = new com.tangem.blockchain.binance.proto.StdSignature.PubKey(this);
+      public com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey buildPartial() {
+        com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey result = new com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey(this);
         onBuilt();
         return result;
       }
@@ -424,16 +424,16 @@ private static final long serialVersionUID = 0L;
       }
       @Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.tangem.blockchain.binance.proto.StdSignature.PubKey) {
-          return mergeFrom((com.tangem.blockchain.binance.proto.StdSignature.PubKey)other);
+        if (other instanceof com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey) {
+          return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(com.tangem.blockchain.binance.proto.StdSignature.PubKey other) {
-        if (other == com.tangem.blockchain.binance.proto.StdSignature.PubKey.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey other) {
+        if (other == com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey.getDefaultInstance()) return this;
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -449,11 +449,11 @@ private static final long serialVersionUID = 0L;
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        com.tangem.blockchain.binance.proto.StdSignature.PubKey parsedMessage = null;
+        com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (com.tangem.blockchain.binance.proto.StdSignature.PubKey) e.getUnfinishedMessage();
+          parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -479,12 +479,12 @@ private static final long serialVersionUID = 0L;
     }
 
     // @@protoc_insertion_point(class_scope:transaction.StdSignature.PubKey)
-    private static final com.tangem.blockchain.binance.proto.StdSignature.PubKey DEFAULT_INSTANCE;
+    private static final com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.StdSignature.PubKey();
+      DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey();
     }
 
-    public static com.tangem.blockchain.binance.proto.StdSignature.PubKey getDefaultInstance() {
+    public static com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
@@ -509,7 +509,7 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.StdSignature.PubKey getDefaultInstanceForType() {
+    public com.tangem.blockchain.blockchains.binance.proto.StdSignature.PubKey getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -628,10 +628,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tangem.blockchain.binance.proto.StdSignature)) {
+    if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.StdSignature)) {
       return super.equals(obj);
     }
-    com.tangem.blockchain.binance.proto.StdSignature other = (com.tangem.blockchain.binance.proto.StdSignature) obj;
+    com.tangem.blockchain.blockchains.binance.proto.StdSignature other = (com.tangem.blockchain.blockchains.binance.proto.StdSignature) obj;
 
     if (!getPubKey()
         .equals(other.getPubKey())) return false;
@@ -667,69 +667,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
       java.nio.ByteBuffer data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
       com.google.protobuf.ByteString data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(byte[] data)
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
       byte[] data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseDelimitedFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseDelimitedFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.StdSignature parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -742,7 +742,7 @@ private static final long serialVersionUID = 0L;
   public static Builder newBuilder() {
     return DEFAULT_INSTANCE.toBuilder();
   }
-  public static Builder newBuilder(com.tangem.blockchain.binance.proto.StdSignature prototype) {
+  public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.StdSignature prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @Override
@@ -763,21 +763,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder implements
       // @@protoc_insertion_point(builder_implements:transaction.StdSignature)
-      com.tangem.blockchain.binance.proto.StdSignatureOrBuilder {
+      com.tangem.blockchain.blockchains.binance.proto.StdSignatureOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.StdSignature.class, com.tangem.blockchain.binance.proto.StdSignature.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.StdSignature.class, com.tangem.blockchain.blockchains.binance.proto.StdSignature.Builder.class);
     }
 
-    // Construct using com.tangem.blockchain.binance.proto.StdSignature.newBuilder()
+    // Construct using com.tangem.blockchain.blockchains.binance.proto.StdSignature.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -809,17 +809,17 @@ private static final long serialVersionUID = 0L;
     @Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdSignature_descriptor;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.StdSignature getDefaultInstanceForType() {
-      return com.tangem.blockchain.binance.proto.StdSignature.getDefaultInstance();
+    public com.tangem.blockchain.blockchains.binance.proto.StdSignature getDefaultInstanceForType() {
+      return com.tangem.blockchain.blockchains.binance.proto.StdSignature.getDefaultInstance();
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.StdSignature build() {
-      com.tangem.blockchain.binance.proto.StdSignature result = buildPartial();
+    public com.tangem.blockchain.blockchains.binance.proto.StdSignature build() {
+      com.tangem.blockchain.blockchains.binance.proto.StdSignature result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -827,8 +827,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.StdSignature buildPartial() {
-      com.tangem.blockchain.binance.proto.StdSignature result = new com.tangem.blockchain.binance.proto.StdSignature(this);
+    public com.tangem.blockchain.blockchains.binance.proto.StdSignature buildPartial() {
+      com.tangem.blockchain.blockchains.binance.proto.StdSignature result = new com.tangem.blockchain.blockchains.binance.proto.StdSignature(this);
       result.pubKey_ = pubKey_;
       result.signature_ = signature_;
       result.accountNumber_ = accountNumber_;
@@ -871,16 +871,16 @@ private static final long serialVersionUID = 0L;
     }
     @Override
     public Builder mergeFrom(com.google.protobuf.Message other) {
-      if (other instanceof com.tangem.blockchain.binance.proto.StdSignature) {
-        return mergeFrom((com.tangem.blockchain.binance.proto.StdSignature)other);
+      if (other instanceof com.tangem.blockchain.blockchains.binance.proto.StdSignature) {
+        return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.StdSignature)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tangem.blockchain.binance.proto.StdSignature other) {
-      if (other == com.tangem.blockchain.binance.proto.StdSignature.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.StdSignature other) {
+      if (other == com.tangem.blockchain.blockchains.binance.proto.StdSignature.getDefaultInstance()) return this;
       if (other.getPubKey() != com.google.protobuf.ByteString.EMPTY) {
         setPubKey(other.getPubKey());
       }
@@ -908,11 +908,11 @@ private static final long serialVersionUID = 0L;
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      com.tangem.blockchain.binance.proto.StdSignature parsedMessage = null;
+      com.tangem.blockchain.blockchains.binance.proto.StdSignature parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tangem.blockchain.binance.proto.StdSignature) e.getUnfinishedMessage();
+        parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.StdSignature) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -1096,12 +1096,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:transaction.StdSignature)
-  private static final com.tangem.blockchain.binance.proto.StdSignature DEFAULT_INSTANCE;
+  private static final com.tangem.blockchain.blockchains.binance.proto.StdSignature DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.StdSignature();
+    DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.StdSignature();
   }
 
-  public static com.tangem.blockchain.binance.proto.StdSignature getDefaultInstance() {
+  public static com.tangem.blockchain.blockchains.binance.proto.StdSignature getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -1126,7 +1126,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @Override
-  public com.tangem.blockchain.binance.proto.StdSignature getDefaultInstanceForType() {
+  public com.tangem.blockchain.blockchains.binance.proto.StdSignature getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignatureOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignatureOrBuilder.java
similarity index 95%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignatureOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignatureOrBuilder.java
index 622113ae4c..cc73a528fd 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdSignatureOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdSignatureOrBuilder.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 public interface StdSignatureOrBuilder extends
     // @@protoc_insertion_point(interface_extends:transaction.StdSignature)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTx.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTx.java
similarity index 88%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTx.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTx.java
index 92c61b4366..637a9f4ac7 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTx.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTx.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 /**
  * 
@@ -109,15 +109,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
   }
 
   @Override
   protected FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_fieldAccessorTable
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tangem.blockchain.binance.proto.StdTx.class, com.tangem.blockchain.binance.proto.StdTx.Builder.class);
+            com.tangem.blockchain.blockchains.binance.proto.StdTx.class, com.tangem.blockchain.blockchains.binance.proto.StdTx.Builder.class);
   }
 
   private int bitField0_;
@@ -337,10 +337,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tangem.blockchain.binance.proto.StdTx)) {
+    if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.StdTx)) {
       return super.equals(obj);
     }
-    com.tangem.blockchain.binance.proto.StdTx other = (com.tangem.blockchain.binance.proto.StdTx) obj;
+    com.tangem.blockchain.blockchains.binance.proto.StdTx other = (com.tangem.blockchain.blockchains.binance.proto.StdTx) obj;
 
     if (!getMsgsList()
         .equals(other.getMsgsList())) return false;
@@ -383,69 +383,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
       java.nio.ByteBuffer data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
       com.google.protobuf.ByteString data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(byte[] data)
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
       byte[] data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseDelimitedFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseDelimitedFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.StdTx parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -458,7 +458,7 @@ private static final long serialVersionUID = 0L;
   public static Builder newBuilder() {
     return DEFAULT_INSTANCE.toBuilder();
   }
-  public static Builder newBuilder(com.tangem.blockchain.binance.proto.StdTx prototype) {
+  public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.StdTx prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @Override
@@ -483,21 +483,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder implements
       // @@protoc_insertion_point(builder_implements:transaction.StdTx)
-      com.tangem.blockchain.binance.proto.StdTxOrBuilder {
+      com.tangem.blockchain.blockchains.binance.proto.StdTxOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.StdTx.class, com.tangem.blockchain.binance.proto.StdTx.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.StdTx.class, com.tangem.blockchain.blockchains.binance.proto.StdTx.Builder.class);
     }
 
-    // Construct using com.tangem.blockchain.binance.proto.StdTx.newBuilder()
+    // Construct using com.tangem.blockchain.blockchains.binance.proto.StdTx.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -531,17 +531,17 @@ private static final long serialVersionUID = 0L;
     @Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_StdTx_descriptor;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.StdTx getDefaultInstanceForType() {
-      return com.tangem.blockchain.binance.proto.StdTx.getDefaultInstance();
+    public com.tangem.blockchain.blockchains.binance.proto.StdTx getDefaultInstanceForType() {
+      return com.tangem.blockchain.blockchains.binance.proto.StdTx.getDefaultInstance();
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.StdTx build() {
-      com.tangem.blockchain.binance.proto.StdTx result = buildPartial();
+    public com.tangem.blockchain.blockchains.binance.proto.StdTx build() {
+      com.tangem.blockchain.blockchains.binance.proto.StdTx result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -549,8 +549,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.StdTx buildPartial() {
-      com.tangem.blockchain.binance.proto.StdTx result = new com.tangem.blockchain.binance.proto.StdTx(this);
+    public com.tangem.blockchain.blockchains.binance.proto.StdTx buildPartial() {
+      com.tangem.blockchain.blockchains.binance.proto.StdTx result = new com.tangem.blockchain.blockchains.binance.proto.StdTx(this);
       int from_bitField0_ = bitField0_;
       int to_bitField0_ = 0;
       if (((bitField0_ & 0x00000001) != 0)) {
@@ -605,16 +605,16 @@ private static final long serialVersionUID = 0L;
     }
     @Override
     public Builder mergeFrom(com.google.protobuf.Message other) {
-      if (other instanceof com.tangem.blockchain.binance.proto.StdTx) {
-        return mergeFrom((com.tangem.blockchain.binance.proto.StdTx)other);
+      if (other instanceof com.tangem.blockchain.blockchains.binance.proto.StdTx) {
+        return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.StdTx)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tangem.blockchain.binance.proto.StdTx other) {
-      if (other == com.tangem.blockchain.binance.proto.StdTx.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.StdTx other) {
+      if (other == com.tangem.blockchain.blockchains.binance.proto.StdTx.getDefaultInstance()) return this;
       if (!other.msgs_.isEmpty()) {
         if (msgs_.isEmpty()) {
           msgs_ = other.msgs_;
@@ -660,11 +660,11 @@ private static final long serialVersionUID = 0L;
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      com.tangem.blockchain.binance.proto.StdTx parsedMessage = null;
+      com.tangem.blockchain.blockchains.binance.proto.StdTx parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tangem.blockchain.binance.proto.StdTx) e.getUnfinishedMessage();
+        parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.StdTx) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -1068,12 +1068,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:transaction.StdTx)
-  private static final com.tangem.blockchain.binance.proto.StdTx DEFAULT_INSTANCE;
+  private static final com.tangem.blockchain.blockchains.binance.proto.StdTx DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.StdTx();
+    DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.StdTx();
   }
 
-  public static com.tangem.blockchain.binance.proto.StdTx getDefaultInstance() {
+  public static com.tangem.blockchain.blockchains.binance.proto.StdTx getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -1098,7 +1098,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @Override
-  public com.tangem.blockchain.binance.proto.StdTx getDefaultInstanceForType() {
+  public com.tangem.blockchain.blockchains.binance.proto.StdTx getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTxOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTxOrBuilder.java
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTxOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTxOrBuilder.java
index b8e6b81057..1e2f47be6a 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/StdTxOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/StdTxOrBuilder.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 public interface StdTxOrBuilder extends
     // @@protoc_insertion_point(interface_extends:transaction.StdTx)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreeze.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreeze.java
similarity index 80%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreeze.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreeze.java
index f0cfab3b22..bc61584e2a 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreeze.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreeze.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 /**
  * 
@@ -85,15 +85,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
   }
 
   @Override
   protected FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_fieldAccessorTable
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tangem.blockchain.binance.proto.TokenFreeze.class, com.tangem.blockchain.binance.proto.TokenFreeze.Builder.class);
+            com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.class, com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.Builder.class);
   }
 
   public static final int FROM_FIELD_NUMBER = 1;
@@ -217,10 +217,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tangem.blockchain.binance.proto.TokenFreeze)) {
+    if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.TokenFreeze)) {
       return super.equals(obj);
     }
-    com.tangem.blockchain.binance.proto.TokenFreeze other = (com.tangem.blockchain.binance.proto.TokenFreeze) obj;
+    com.tangem.blockchain.blockchains.binance.proto.TokenFreeze other = (com.tangem.blockchain.blockchains.binance.proto.TokenFreeze) obj;
 
     if (!getFrom()
         .equals(other.getFrom())) return false;
@@ -251,69 +251,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
       java.nio.ByteBuffer data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
       com.google.protobuf.ByteString data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(byte[] data)
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
       byte[] data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseDelimitedFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseDelimitedFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.TokenFreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -326,7 +326,7 @@ private static final long serialVersionUID = 0L;
   public static Builder newBuilder() {
     return DEFAULT_INSTANCE.toBuilder();
   }
-  public static Builder newBuilder(com.tangem.blockchain.binance.proto.TokenFreeze prototype) {
+  public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.TokenFreeze prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @Override
@@ -351,21 +351,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder implements
       // @@protoc_insertion_point(builder_implements:transaction.TokenFreeze)
-      com.tangem.blockchain.binance.proto.TokenFreezeOrBuilder {
+      com.tangem.blockchain.blockchains.binance.proto.TokenFreezeOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.TokenFreeze.class, com.tangem.blockchain.binance.proto.TokenFreeze.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.class, com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.Builder.class);
     }
 
-    // Construct using com.tangem.blockchain.binance.proto.TokenFreeze.newBuilder()
+    // Construct using com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -395,17 +395,17 @@ private static final long serialVersionUID = 0L;
     @Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenFreeze_descriptor;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.TokenFreeze getDefaultInstanceForType() {
-      return com.tangem.blockchain.binance.proto.TokenFreeze.getDefaultInstance();
+    public com.tangem.blockchain.blockchains.binance.proto.TokenFreeze getDefaultInstanceForType() {
+      return com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.getDefaultInstance();
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.TokenFreeze build() {
-      com.tangem.blockchain.binance.proto.TokenFreeze result = buildPartial();
+    public com.tangem.blockchain.blockchains.binance.proto.TokenFreeze build() {
+      com.tangem.blockchain.blockchains.binance.proto.TokenFreeze result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -413,8 +413,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.TokenFreeze buildPartial() {
-      com.tangem.blockchain.binance.proto.TokenFreeze result = new com.tangem.blockchain.binance.proto.TokenFreeze(this);
+    public com.tangem.blockchain.blockchains.binance.proto.TokenFreeze buildPartial() {
+      com.tangem.blockchain.blockchains.binance.proto.TokenFreeze result = new com.tangem.blockchain.blockchains.binance.proto.TokenFreeze(this);
       result.from_ = from_;
       result.symbol_ = symbol_;
       result.amount_ = amount_;
@@ -456,16 +456,16 @@ private static final long serialVersionUID = 0L;
     }
     @Override
     public Builder mergeFrom(com.google.protobuf.Message other) {
-      if (other instanceof com.tangem.blockchain.binance.proto.TokenFreeze) {
-        return mergeFrom((com.tangem.blockchain.binance.proto.TokenFreeze)other);
+      if (other instanceof com.tangem.blockchain.blockchains.binance.proto.TokenFreeze) {
+        return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.TokenFreeze)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tangem.blockchain.binance.proto.TokenFreeze other) {
-      if (other == com.tangem.blockchain.binance.proto.TokenFreeze.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.TokenFreeze other) {
+      if (other == com.tangem.blockchain.blockchains.binance.proto.TokenFreeze.getDefaultInstance()) return this;
       if (other.getFrom() != com.google.protobuf.ByteString.EMPTY) {
         setFrom(other.getFrom());
       }
@@ -491,11 +491,11 @@ private static final long serialVersionUID = 0L;
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      com.tangem.blockchain.binance.proto.TokenFreeze parsedMessage = null;
+      com.tangem.blockchain.blockchains.binance.proto.TokenFreeze parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tangem.blockchain.binance.proto.TokenFreeze) e.getUnfinishedMessage();
+        parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.TokenFreeze) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -689,12 +689,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:transaction.TokenFreeze)
-  private static final com.tangem.blockchain.binance.proto.TokenFreeze DEFAULT_INSTANCE;
+  private static final com.tangem.blockchain.blockchains.binance.proto.TokenFreeze DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.TokenFreeze();
+    DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.TokenFreeze();
   }
 
-  public static com.tangem.blockchain.binance.proto.TokenFreeze getDefaultInstance() {
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenFreeze getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -719,7 +719,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @Override
-  public com.tangem.blockchain.binance.proto.TokenFreeze getDefaultInstanceForType() {
+  public com.tangem.blockchain.blockchains.binance.proto.TokenFreeze getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreezeOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreezeOrBuilder.java
similarity index 93%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreezeOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreezeOrBuilder.java
index d0e30a2b2a..b4a525e026 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenFreezeOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenFreezeOrBuilder.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 public interface TokenFreezeOrBuilder extends
     // @@protoc_insertion_point(interface_extends:transaction.TokenFreeze)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreeze.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreeze.java
similarity index 80%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreeze.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreeze.java
index 48167e4b06..e1f660b591 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreeze.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreeze.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 /**
  * 
@@ -85,15 +85,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
   }
 
   @Override
   protected FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_fieldAccessorTable
+    return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tangem.blockchain.binance.proto.TokenUnfreeze.class, com.tangem.blockchain.binance.proto.TokenUnfreeze.Builder.class);
+            com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.class, com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.Builder.class);
   }
 
   public static final int FROM_FIELD_NUMBER = 1;
@@ -217,10 +217,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tangem.blockchain.binance.proto.TokenUnfreeze)) {
+    if (!(obj instanceof com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze)) {
       return super.equals(obj);
     }
-    com.tangem.blockchain.binance.proto.TokenUnfreeze other = (com.tangem.blockchain.binance.proto.TokenUnfreeze) obj;
+    com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze other = (com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze) obj;
 
     if (!getFrom()
         .equals(other.getFrom())) return false;
@@ -251,69 +251,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
       java.nio.ByteBuffer data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
       com.google.protobuf.ByteString data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(byte[] data)
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
       byte[] data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseDelimitedFrom(java.io.InputStream input)
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseDelimitedFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze parseFrom(
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -326,7 +326,7 @@ private static final long serialVersionUID = 0L;
   public static Builder newBuilder() {
     return DEFAULT_INSTANCE.toBuilder();
   }
-  public static Builder newBuilder(com.tangem.blockchain.binance.proto.TokenUnfreeze prototype) {
+  public static Builder newBuilder(com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @Override
@@ -351,21 +351,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder implements
       // @@protoc_insertion_point(builder_implements:transaction.TokenUnfreeze)
-      com.tangem.blockchain.binance.proto.TokenUnfreezeOrBuilder {
+      com.tangem.blockchain.blockchains.binance.proto.TokenUnfreezeOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
     }
 
     @Override
     protected FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_fieldAccessorTable
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tangem.blockchain.binance.proto.TokenUnfreeze.class, com.tangem.blockchain.binance.proto.TokenUnfreeze.Builder.class);
+              com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.class, com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.Builder.class);
     }
 
-    // Construct using com.tangem.blockchain.binance.proto.TokenUnfreeze.newBuilder()
+    // Construct using com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -395,17 +395,17 @@ private static final long serialVersionUID = 0L;
     @Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tangem.blockchain.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
+      return com.tangem.blockchain.blockchains.binance.proto.Transaction.internal_static_transaction_TokenUnfreeze_descriptor;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.TokenUnfreeze getDefaultInstanceForType() {
-      return com.tangem.blockchain.binance.proto.TokenUnfreeze.getDefaultInstance();
+    public com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze getDefaultInstanceForType() {
+      return com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.getDefaultInstance();
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.TokenUnfreeze build() {
-      com.tangem.blockchain.binance.proto.TokenUnfreeze result = buildPartial();
+    public com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze build() {
+      com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -413,8 +413,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @Override
-    public com.tangem.blockchain.binance.proto.TokenUnfreeze buildPartial() {
-      com.tangem.blockchain.binance.proto.TokenUnfreeze result = new com.tangem.blockchain.binance.proto.TokenUnfreeze(this);
+    public com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze buildPartial() {
+      com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze result = new com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze(this);
       result.from_ = from_;
       result.symbol_ = symbol_;
       result.amount_ = amount_;
@@ -456,16 +456,16 @@ private static final long serialVersionUID = 0L;
     }
     @Override
     public Builder mergeFrom(com.google.protobuf.Message other) {
-      if (other instanceof com.tangem.blockchain.binance.proto.TokenUnfreeze) {
-        return mergeFrom((com.tangem.blockchain.binance.proto.TokenUnfreeze)other);
+      if (other instanceof com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze) {
+        return mergeFrom((com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tangem.blockchain.binance.proto.TokenUnfreeze other) {
-      if (other == com.tangem.blockchain.binance.proto.TokenUnfreeze.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze other) {
+      if (other == com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze.getDefaultInstance()) return this;
       if (other.getFrom() != com.google.protobuf.ByteString.EMPTY) {
         setFrom(other.getFrom());
       }
@@ -491,11 +491,11 @@ private static final long serialVersionUID = 0L;
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      com.tangem.blockchain.binance.proto.TokenUnfreeze parsedMessage = null;
+      com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tangem.blockchain.binance.proto.TokenUnfreeze) e.getUnfinishedMessage();
+        parsedMessage = (com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -689,12 +689,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:transaction.TokenUnfreeze)
-  private static final com.tangem.blockchain.binance.proto.TokenUnfreeze DEFAULT_INSTANCE;
+  private static final com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tangem.blockchain.binance.proto.TokenUnfreeze();
+    DEFAULT_INSTANCE = new com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze();
   }
 
-  public static com.tangem.blockchain.binance.proto.TokenUnfreeze getDefaultInstance() {
+  public static com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -719,7 +719,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @Override
-  public com.tangem.blockchain.binance.proto.TokenUnfreeze getDefaultInstanceForType() {
+  public com.tangem.blockchain.blockchains.binance.proto.TokenUnfreeze getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreezeOrBuilder.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreezeOrBuilder.java
similarity index 94%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreezeOrBuilder.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreezeOrBuilder.java
index 7b05351dc3..4b8e0b4d5e 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/TokenUnfreezeOrBuilder.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/TokenUnfreezeOrBuilder.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 public interface TokenUnfreezeOrBuilder extends
     // @@protoc_insertion_point(interface_extends:transaction.TokenUnfreeze)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/Transaction.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Transaction.java
similarity index 99%
rename from blockchain/src/main/java/com/tangem/blockchain/binance/proto/Transaction.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Transaction.java
index f50167e356..9d79bb6c9b 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/binance/proto/Transaction.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/binance/proto/Transaction.java
@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: dex.proto
 
-package com.tangem.blockchain.binance.proto;
+package com.tangem.blockchain.blockchains.binance.proto;
 
 public final class Transaction {
   private Transaction() {}
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddress.kt
similarity index 88%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinAddress.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddress.kt
index 01cdd30770..d4bf305e42 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinAddress.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddress.kt
@@ -1,6 +1,7 @@
-package com.tangem.blockchain.bitcoin
+package com.tangem.blockchain.blockchains.bitcoin
 
 
+import com.tangem.blockchain.common.AddressService
 import com.tangem.common.extensions.calculateRipemd160
 import com.tangem.common.extensions.calculateSha256
 import org.bitcoinj.core.AddressFormatException
@@ -10,25 +11,16 @@ import org.bitcoinj.params.MainNetParams
 import org.bitcoinj.params.TestNet3Params
 import java.security.MessageDigest
 
-class BitcoinAddressFactory {
-    companion object {
-        fun makeAddress(walletPublicKey: ByteArray, testNet: Boolean = false): String {
+class BitcoinAddressService(private val testNet: Boolean = false): AddressService {
+    override fun makeAddress(walletPublicKey: ByteArray): String {
             val netSelectionByte = if (testNet) 0x6f.toByte() else 0x00.toByte()
             val hash1 = walletPublicKey.calculateSha256().calculateRipemd160()
             val hash2 = byteArrayOf(netSelectionByte).plus(hash1).calculateSha256().calculateSha256()
             val result = byteArrayOf(netSelectionByte) + hash1 + hash2[0] + hash2[1] + hash2[2] + hash2[3]
             return Base58.encode(result)
         }
-    }
-}
 
-class BitcoinAddressValidator {
-    companion object {
-
-        private const val firstLetters = "123nm"
-        private const val firstLettersNonTestNet = "13"
-
-        fun validate(address: String, testNet: Boolean = false): Boolean {
+       override fun validate(address: String): Boolean {
             if (firstLetters.contains(address.first())) {
                 if (testNet && firstLettersNonTestNet.contains(address.first())) return false
                 if (address.length !in 26..35) return false
@@ -68,5 +60,9 @@ class BitcoinAddressValidator {
                 false
             }
         }
+
+    companion object {
+        private const val firstLetters = "123nm"
+        private const val firstLettersNonTestNet = "13"
     }
 }
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinTransactionBuilder.kt
similarity index 90%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinTransactionBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinTransactionBuilder.kt
index fc3f1b41db..24f072b218 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinTransactionBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinTransactionBuilder.kt
@@ -1,7 +1,7 @@
-package com.tangem.blockchain.bitcoin
+package com.tangem.blockchain.blockchains.bitcoin
 
 import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.common.extensions.Result
+import com.tangem.blockchain.extensions.Result
 import com.tangem.common.extensions.isZero
 import org.bitcoinj.core.*
 import org.bitcoinj.crypto.TransactionSignature
@@ -10,7 +10,9 @@ import org.bitcoinj.script.ScriptBuilder
 import java.math.BigDecimal
 import java.math.BigInteger
 
-class BitcoinTransactionBuilder(private val testNet: Boolean) {
+class BitcoinTransactionBuilder(
+        private val walletPublicKey: ByteArray, private val testNet: Boolean = false
+) {
 
     private lateinit var transaction: Transaction
     private var networkParameters: NetworkParameters? = null
@@ -44,9 +46,9 @@ class BitcoinTransactionBuilder(private val testNet: Boolean) {
                 ?: 0.toBigDecimal()))
     }
 
-    fun buildToSend(signedTransaction: ByteArray, publicKey: ByteArray): ByteArray {
+    fun buildToSend(signedTransaction: ByteArray): ByteArray {
         for (index in transaction.inputs.indices) {
-            transaction.inputs[index].scriptSig = createScript(index, signedTransaction, publicKey)
+            transaction.inputs[index].scriptSig = createScript(index, signedTransaction, walletPublicKey)
         }
         return transaction.bitcoinSerialize()
     }
@@ -59,13 +61,13 @@ class BitcoinTransactionBuilder(private val testNet: Boolean) {
         return ScriptBuilder.createInputScript(signature, ECKey.fromPublicOnly(publicKey))
     }
 
-    fun getEstimateSize(transactionData: TransactionData, walletPublicKey: ByteArray): Result {
+    fun getEstimateSize(transactionData: TransactionData): Result {
         val buildTransactionResult = buildToSign(transactionData)
         when (buildTransactionResult) {
             is Result.Failure -> return buildTransactionResult
             is Result.Success -> {
                 val hashes = buildTransactionResult.data
-                val finalTransaction = buildToSend(ByteArray(64 * hashes.size) { 1 }, walletPublicKey)
+                val finalTransaction = buildToSend(ByteArray(64 * hashes.size) { 1 })
                 return Result.Success(finalTransaction.size)
             }
         }
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinWalletManager.kt
similarity index 66%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinWalletManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinWalletManager.kt
index c026ccd4f9..0812b70c17 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinWalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinWalletManager.kt
@@ -1,32 +1,26 @@
-package com.tangem.blockchain.bitcoin
+package com.tangem.blockchain.blockchains.bitcoin
 
 import android.util.Log
-import com.tangem.blockchain.bitcoin.network.BitcoinAddressResponse
-import com.tangem.blockchain.bitcoin.network.BitcoinNetworkManager
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinAddressResponse
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinNetworkManager
 import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.wallets.CurrencyWallet
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
 import com.tangem.common.CompletionResult
 import com.tangem.common.extensions.toHexString
 import java.math.BigDecimal
 
 class BitcoinWalletManager(
-        private val cardId: String,
-        private val walletPublicKey: ByteArray,
-        override var wallet: CurrencyWallet,
-        isTestNet: Boolean = false
-) : WalletManager,
-        TransactionSender,
-        FeeProvider {
+        cardId: String,
+        wallet: Wallet,
+        private val transactionBuilder: BitcoinTransactionBuilder,
+        private val networkManager: BitcoinNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
 
-    override val blockchain = if (isTestNet) Blockchain.BitcoinTestnet else Blockchain.Bitcoin
-    private val address = blockchain.makeAddress(walletPublicKey)
-    private val transactionBuilder = BitcoinTransactionBuilder(isTestNet)
-    private val networkManager = BitcoinNetworkManager(isTestNet)
+    private val blockchain = wallet.blockchain
 
     override suspend fun update() {
-        val response = networkManager.getInfo(address)
+        val response = networkManager.getInfo(wallet.address)
         when (response) {
             is Result.Success -> updateWallet(response.data)
             is Result.Failure -> updateError(response.error)
@@ -35,18 +29,12 @@ class BitcoinWalletManager(
 
     private fun updateWallet(response: BitcoinAddressResponse) {
         Log.d(this::class.java.simpleName, "Balance is ${response.balance}")
-        wallet.balances[AmountType.Coin]?.value = response.balance
+        wallet.amounts[AmountType.Coin]?.value = response.balance
         transactionBuilder.unspentOutputs = response.unspentTransactions
         if (response.hasUnconfirmed) {
-            if (wallet.pendingTransactions.isEmpty()) {
-                wallet.pendingTransactions.add(TransactionData(
-                        Amount(blockchain.currency, decimals = blockchain.decimals),
-                        null,
-                        "unknown",
-                        wallet.address))
-            }
+            if (wallet.transactions.isEmpty()) wallet.addIncomingTransaction()
         } else {
-            wallet.pendingTransactions.clear()
+            wallet.transactions.clear()
         }
     }
 
@@ -62,7 +50,7 @@ class BitcoinWalletManager(
             is Result.Success -> {
                 when (val signerResponse = signer.sign(buildTransactionResult.data.toTypedArray(), cardId)) {
                     is CompletionResult.Success -> {
-                        val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature, walletPublicKey)
+                        val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature)
                         return networkManager.sendTransaction(transactionToSend.toHexString())
                     }
                     is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
@@ -75,13 +63,10 @@ class BitcoinWalletManager(
         when (val result = networkManager.getFee()) {
             is Result.Failure -> return result
             is Result.Success -> {
-                val feeValue = BigDecimal.ONE.movePointLeft(blockchain.decimals.toInt())
+                val feeValue = BigDecimal.ONE.movePointLeft(blockchain.decimals())
                 amount.value = amount.value!! - feeValue
                 val sizeResult = transactionBuilder.getEstimateSize(
-                        TransactionData(amount,
-                                Amount(feeValue, blockchain),
-                                address, destination),
-                        walletPublicKey
+                        TransactionData(amount, Amount(amount, feeValue), wallet.address, destination)
                 )
                 when (sizeResult) {
                     is Result.Failure -> return sizeResult
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinNetworkManager.kt
similarity index 78%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinNetworkManager.kt
index 03914a56cf..5810ede23f 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinNetworkManager.kt
@@ -1,21 +1,21 @@
-package com.tangem.blockchain.bitcoin.network
+package com.tangem.blockchain.blockchains.bitcoin.network
 
-import com.tangem.blockchain.bitcoin.UnspentTransaction
-import com.tangem.blockchain.bitcoin.network.api.BlockchainInfoApi
-import com.tangem.blockchain.bitcoin.network.api.BlockcypherApi
-import com.tangem.blockchain.bitcoin.network.api.EstimatefeeApi
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.network.API_BLOCKCHAIN_INFO
-import com.tangem.blockchain.common.network.API_BLOCKCYPHER
-import com.tangem.blockchain.common.network.API_ESTIMATEFEE
-import com.tangem.blockchain.common.network.createRetrofitInstance
+import com.tangem.blockchain.blockchains.bitcoin.UnspentTransaction
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockchainInfoApi
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockcypherApi
+import com.tangem.blockchain.blockchains.bitcoin.network.api.EstimatefeeApi
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_BLOCKCHAIN_INFO
+import com.tangem.blockchain.network.API_BLOCKCYPHER
+import com.tangem.blockchain.network.API_ESTIMATEFEE
+import com.tangem.blockchain.network.createRetrofitInstance
 import retrofit2.HttpException
 import java.io.IOException
 import java.math.BigDecimal
 
 
-class BitcoinNetworkManager(private val isTestNet: Boolean) : BitcoinProvider {
+class BitcoinNetworkManager(private val isTestNet: Boolean = false) : BitcoinProvider {
 
     private val blockcypherProvider by lazy {
         val api = createRetrofitInstance(API_BLOCKCYPHER)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinProvider.kt
similarity index 57%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinProvider.kt
index e82fb2f67c..13e99f95d3 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BitcoinProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BitcoinProvider.kt
@@ -1,7 +1,7 @@
-package com.tangem.blockchain.bitcoin.network
+package com.tangem.blockchain.blockchains.bitcoin.network
 
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
 
 interface BitcoinProvider {
     suspend fun getInfo(address: String): Result
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockchainInfoProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockchainInfoProvider.kt
similarity index 85%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockchainInfoProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockchainInfoProvider.kt
index 2ae4f3b03d..b26b05debc 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockchainInfoProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockchainInfoProvider.kt
@@ -1,12 +1,12 @@
-package com.tangem.blockchain.bitcoin.network
+package com.tangem.blockchain.blockchains.bitcoin.network
 
-import com.tangem.blockchain.bitcoin.UnspentTransaction
-import com.tangem.blockchain.bitcoin.network.api.BlockchainInfoApi
-import com.tangem.blockchain.bitcoin.network.api.EstimatefeeApi
+import com.tangem.blockchain.blockchains.bitcoin.UnspentTransaction
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockchainInfoApi
+import com.tangem.blockchain.blockchains.bitcoin.network.api.EstimatefeeApi
 import com.tangem.blockchain.common.Blockchain
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
 import com.tangem.common.extensions.hexToBytes
 import kotlinx.coroutines.async
 import kotlinx.coroutines.coroutineScope
@@ -16,7 +16,7 @@ class BlockchainInfoProvider(
         private val blockchainApi: BlockchainInfoApi,
         private val estimatefeeApi: EstimatefeeApi
 ) : BitcoinProvider {
-    val decimals = Blockchain.Bitcoin.decimals.toInt()
+    val decimals = Blockchain.Bitcoin.decimals()
 
     override suspend fun getInfo(address: String): Result {
         return try {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockcypherProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockcypherProvider.kt
similarity index 80%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockcypherProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockcypherProvider.kt
index 709804cc40..17da8cced0 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/BlockcypherProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/BlockcypherProvider.kt
@@ -1,20 +1,20 @@
-package com.tangem.blockchain.bitcoin.network
+package com.tangem.blockchain.blockchains.bitcoin.network
 
-import com.tangem.blockchain.bitcoin.UnspentTransaction
-import com.tangem.blockchain.bitcoin.network.api.BlockcypherApi
-import com.tangem.blockchain.bitcoin.network.api.BlockcypherBody
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherFee
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherResponse
+import com.tangem.blockchain.blockchains.bitcoin.UnspentTransaction
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockcypherApi
+import com.tangem.blockchain.blockchains.bitcoin.network.api.BlockcypherBody
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherFee
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherResponse
 import com.tangem.blockchain.common.Blockchain
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
 import com.tangem.common.extensions.hexToBytes
 
 class BlockcypherProvider(private val api: BlockcypherApi, isTestNet: Boolean) : BitcoinProvider {
 
     private val blockchain = "btc"
-    private val decimals = Blockchain.Bitcoin.decimals.toInt()
+    private val decimals = Blockchain.Bitcoin.decimals()
 
     private val network = if (isTestNet) {
         BlockcypherNetwork.Test.network
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockchainInfoApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockchainInfoApi.kt
similarity index 64%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockchainInfoApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockchainInfoApi.kt
index 1b43631d5a..294846b58c 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockchainInfoApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockchainInfoApi.kt
@@ -1,7 +1,7 @@
-package com.tangem.blockchain.bitcoin.network.api
+package com.tangem.blockchain.blockchains.bitcoin.network.api
 
-import com.tangem.blockchain.bitcoin.network.response.BlockchainInfoAddress
-import com.tangem.blockchain.bitcoin.network.response.BlockchainInfoUnspents
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockchainInfoAddress
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockchainInfoUnspents
 import okhttp3.ResponseBody
 import retrofit2.http.*
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockcypherApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockcypherApi.kt
similarity index 80%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockcypherApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockcypherApi.kt
index 755191e81e..14b78b0e53 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/BlockcypherApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/BlockcypherApi.kt
@@ -1,9 +1,9 @@
-package com.tangem.blockchain.bitcoin.network.api
+package com.tangem.blockchain.blockchains.bitcoin.network.api
 
 import com.squareup.moshi.JsonClass
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherFee
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherResponse
-import com.tangem.blockchain.bitcoin.network.response.BlockcypherTx
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherFee
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherResponse
+import com.tangem.blockchain.blockchains.bitcoin.network.response.BlockcypherTx
 import retrofit2.http.*
 
 interface BlockcypherApi {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/EstimateFeeApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/EstimateFeeApi.kt
similarity index 85%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/EstimateFeeApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/EstimateFeeApi.kt
index 22e95304db..393e03a00b 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/api/EstimateFeeApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/api/EstimateFeeApi.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.bitcoin.network.api
+package com.tangem.blockchain.blockchains.bitcoin.network.api
 
 import retrofit2.http.GET
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockchainInfoResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockchainInfoResponse.kt
similarity index 94%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockchainInfoResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockchainInfoResponse.kt
index 015d867985..e7ec0f2734 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockchainInfoResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockchainInfoResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.bitcoin.network.response
+package com.tangem.blockchain.blockchains.bitcoin.network.response
 
 import com.squareup.moshi.Json
 import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockcypherResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockcypherResponse.kt
similarity index 95%
rename from blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockcypherResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockcypherResponse.kt
index b1e869797a..a0e79c45b2 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/network/response/BlockcypherResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/bitcoin/network/response/BlockcypherResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.bitcoin.network.response
+package com.tangem.blockchain.blockchains.bitcoin.network.response
 
 import com.squareup.moshi.Json
 import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoAddress.kt
new file mode 100644
index 0000000000..ec72bc4b69
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoAddress.kt
@@ -0,0 +1,121 @@
+package com.tangem.blockchain.blockchains.cardano
+
+import co.nstant.`in`.cbor.CborBuilder
+import co.nstant.`in`.cbor.CborDecoder
+import co.nstant.`in`.cbor.CborEncoder
+import co.nstant.`in`.cbor.model.Array
+import co.nstant.`in`.cbor.model.ByteString
+import co.nstant.`in`.cbor.model.UnsignedInteger
+import com.tangem.blockchain.blockchains.cardano.crypto.Blake2b
+import com.tangem.blockchain.common.AddressService
+import com.tangem.blockchain.extensions.decodeBase58
+import com.tangem.blockchain.extensions.encodeBase58
+import org.spongycastle.crypto.util.DigestFactory
+import java.io.ByteArrayInputStream
+import java.io.ByteArrayOutputStream
+import java.util.zip.CRC32
+
+class CardanoAddressService : AddressService {
+    override fun makeAddress(walletPublicKey: ByteArray): String {
+        val extendedPublicKey = extendPublicKey(walletPublicKey)
+
+        val pubKeyWithAttributes = getPubKeyWithAttributes(extendedPublicKey)
+        val sha3Hash = getSha3Hash(pubKeyWithAttributes)
+
+        val blake2b = Blake2b.Digest.newInstance(28)
+        val blakeHash = blake2b.digest(sha3Hash)
+
+        val hashWithAttributes = getHashWithAttributes(blakeHash)
+
+        return getAddress(hashWithAttributes)
+    }
+
+    override fun validate(address: String): Boolean {
+        val decoded = address.decodeBase58() ?: return false
+
+        return try {
+            val bais = ByteArrayInputStream(decoded)
+            val addressList =
+                    (CborDecoder(bais).decode()[0] as Array).dataItems
+            val addressItemBytes = (addressList[0] as ByteString).bytes
+            val checksum = (addressList[1] as UnsignedInteger).value.toLong()
+
+            val crc32 = CRC32()
+            crc32.update(addressItemBytes)
+            val calculatedChecksum = crc32.value
+
+            checksum == calculatedChecksum
+        } catch (e: Exception) {
+            false
+        }
+    }
+
+    private fun getPubKeyWithAttributes(extendedPublicKey: ByteArray): ByteArray {
+        val pubKeyWithAttributes = ByteArrayOutputStream()
+        CborEncoder(pubKeyWithAttributes).encode(CborBuilder()
+                    .addArray()
+                        .add(0)
+                            .addArray()
+                                .add(0)
+                                .add(extendedPublicKey)
+                            .end()
+                        .addMap()
+                        .end()
+                    .end()
+                    .build())
+        return pubKeyWithAttributes.toByteArray()
+    }
+
+    private fun getSha3Hash(pubKeyWithAttributes: ByteArray): ByteArray {
+        val sha3Digest = DigestFactory.createSHA3_256()
+        sha3Digest.update(pubKeyWithAttributes, 0, pubKeyWithAttributes.size)
+        val sha3Hash = ByteArray(32)
+        sha3Digest.doFinal(sha3Hash, 0)
+        return sha3Hash
+    }
+
+    private fun getHashWithAttributes(blakeHash: ByteArray): ByteArray {
+        val hashWithAttributes = ByteArrayOutputStream()
+        CborEncoder(hashWithAttributes).encode(CborBuilder()
+                .addArray()
+                    .add(blakeHash)
+                    .addMap() //additional attributes
+                    .end()
+                    .add(0) //address type
+                .end()
+                .build())
+        return hashWithAttributes.toByteArray()
+    }
+
+    private fun getAddress(hashWithAttributes: ByteArray): String {
+        val checksum = getCheckSum(hashWithAttributes)
+
+        val addressItem = CborBuilder().add(hashWithAttributes).build().get(0)
+        addressItem.setTag(24)
+
+        //addr + checksum
+        val address = ByteArrayOutputStream()
+        CborEncoder(address).encode(CborBuilder()
+                .addArray()
+                    .add(addressItem)
+                    .add(checksum)
+                .end()
+                .build())
+
+        return address.toByteArray().encodeBase58()
+    }
+
+    private fun getCheckSum(hashWithAttributes: ByteArray): Long {
+        val crc32 = CRC32()
+        crc32.update(hashWithAttributes)
+        return crc32.value
+    }
+
+    companion object {
+        fun extendPublicKey(publicKey: ByteArray): ByteArray {
+            val zeroBytes = ByteArray(32)
+            zeroBytes.fill(0)
+            return publicKey + zeroBytes
+        }
+    }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoTransactionBuilder.kt
similarity index 91%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoTransactionBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoTransactionBuilder.kt
index a251e0068c..eb3d2ee289 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoTransactionBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoTransactionBuilder.kt
@@ -1,19 +1,20 @@
-package com.tangem.blockchain.cardano
+package com.tangem.blockchain.blockchains.cardano
 
 import co.nstant.`in`.cbor.CborBuilder
 import co.nstant.`in`.cbor.CborDecoder
 import co.nstant.`in`.cbor.CborEncoder
 import co.nstant.`in`.cbor.builder.ArrayBuilder
-import com.tangem.blockchain.cardano.crypto.Blake2b
+import com.tangem.blockchain.blockchains.cardano.crypto.Blake2b
 import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.common.extensions.decodeBase58
+import com.tangem.blockchain.extensions.decodeBase58
 import java.io.ByteArrayInputStream
 import java.io.ByteArrayOutputStream
 import java.math.BigDecimal
 
-class CardanoTransactionBuilder() {
+class CardanoTransactionBuilder(private val walletPublicKey: ByteArray) {
+
     var unspentOutputs: List = listOf()
-    var transactionBody: ByteArray = ByteArray(0)
+    private var transactionBody: ByteArray = ByteArray(0)
 
     fun buildToSign(transactionData: TransactionData): ByteArray {
         val transactionBuilder = CborBuilder()
@@ -43,8 +44,8 @@ class CardanoTransactionBuilder() {
         return prefixedHashBaos.toByteArray()
     }
 
-    fun buildToSend(signature: ByteArray, publicKey: ByteArray): ByteArray {
-        val extendedPublicKey = CardanoAddressFactory.extendPublicKey(publicKey)
+    fun buildToSend(signature: ByteArray): ByteArray {
+        val extendedPublicKey = CardanoAddressService.extendPublicKey(walletPublicKey)
 
         //pubkey + signature
         val witnessBodyBaos = ByteArrayOutputStream()
@@ -144,7 +145,7 @@ class CardanoTransactionBuilder() {
         return fullAmount - (amount + fee)
     }
 
-    fun getEstimateSize(transactionData: TransactionData, walletPublicKey: ByteArray): Int {
+    fun getEstimateSize(transactionData: TransactionData): Int {
         val dummyFeeValue = BigDecimal.valueOf(0.1)
 
         val dummyFee = transactionData.amount.copy(value = dummyFeeValue)
@@ -156,7 +157,7 @@ class CardanoTransactionBuilder() {
                 fee = dummyFee
         )
         buildToSign(dummyTransactionData)
-        return buildToSend(ByteArray(64), walletPublicKey).size
+        return buildToSend(ByteArray(64)).size
     }
 
     companion object {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoWalletManager.kt
similarity index 57%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoWalletManager.kt
index 6060986275..d63bb787ed 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/CardanoWalletManager.kt
@@ -1,31 +1,26 @@
-package com.tangem.blockchain.cardano
+package com.tangem.blockchain.blockchains.cardano
 
 import android.util.Log
-import com.tangem.blockchain.cardano.network.CardanoAddressResponse
-import com.tangem.blockchain.cardano.network.CardanoNetworkManager
+import com.tangem.blockchain.blockchains.cardano.network.CardanoAddressResponse
+import com.tangem.blockchain.blockchains.cardano.network.CardanoNetworkManager
 import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.encodeBase64NoWrap
-import com.tangem.blockchain.wallets.CurrencyWallet
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.encodeBase64NoWrap
 import com.tangem.common.CompletionResult
 import java.math.RoundingMode
 
 class CardanoWalletManager(
-        private val cardId: String,
-        private val walletPublicKey: ByteArray,
-        override var wallet: CurrencyWallet
-) : WalletManager,
-        TransactionSender,
-        FeeProvider {
+        cardId: String,
+        wallet: Wallet,
+        private val transactionBuilder: CardanoTransactionBuilder,
+        private val networkManager: CardanoNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
 
-    override val blockchain = Blockchain.Cardano
-    private val address = blockchain.makeAddress(walletPublicKey)
-    private val transactionBuilder = CardanoTransactionBuilder()
-    private val networkManager = CardanoNetworkManager()
+    private val blockchain = wallet.blockchain
 
     override suspend fun update() {
-        val response = networkManager.getInfo(address)
+        val response = networkManager.getInfo(wallet.address)
         when (response) {
             is Result.Success -> updateWallet(response.data)
             is Result.Failure -> updateError(response.error)
@@ -34,8 +29,8 @@ class CardanoWalletManager(
 
     private fun updateWallet(response: CardanoAddressResponse) {
         Log.d(this::class.java.simpleName, "Balance is ${response.balance.toString()}")
-        wallet.balances[AmountType.Coin]?.value =
-                response.balance.toBigDecimal().movePointLeft(blockchain.decimals.toInt())
+        wallet.amounts[AmountType.Coin]?.value =
+                response.balance.toBigDecimal().movePointLeft(blockchain.decimals())
         transactionBuilder.unspentOutputs = response.unspentOutputs
     }
 
@@ -49,7 +44,7 @@ class CardanoWalletManager(
 
         when (val signerResponse = signer.sign(arrayOf(transactionHash), cardId)) {
             is CompletionResult.Success -> {
-                val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature, walletPublicKey)
+                val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature)
                 return networkManager.sendTransaction(transactionToSend.encodeBase64NoWrap())
             }
             is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
@@ -60,9 +55,9 @@ class CardanoWalletManager(
         val a = 0.155381
         val b = 0.000043946
         val size = transactionBuilder.getEstimateSize(
-                TransactionData(amount, null, address, destination), walletPublicKey
+                TransactionData(amount, null, wallet.address, destination)
         )
-        val fee = (a + b * size).toBigDecimal().setScale(blockchain.decimals.toInt(), RoundingMode.UP)
-        return Result.Success(listOf(Amount(blockchain.currency, fee, address, blockchain.decimals)))
+        val fee = (a + b * size).toBigDecimal().setScale(blockchain.decimals(), RoundingMode.UP)
+        return Result.Success(listOf(Amount(amount, fee)))
     }
 }
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/crypto/Blake2b.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/crypto/Blake2b.java
similarity index 98%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/crypto/Blake2b.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/crypto/Blake2b.java
index 01358597fd..70059e3e6a 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/crypto/Blake2b.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/crypto/Blake2b.java
@@ -17,7 +17,7 @@
    this software. If not, see .
 */
 
-package com.tangem.blockchain.cardano.crypto;
+package com.tangem.blockchain.blockchains.cardano.crypto;
 
 import java.io.PrintStream;
 import java.io.Serializable;
@@ -25,14 +25,14 @@ import java.security.Key;
 import java.security.spec.AlgorithmParameterSpec;
 import java.util.Arrays;
 
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.Assert.assertFail;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.Assert.exclusiveLowerBound;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.Assert.inclusiveLowerBound;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.Assert.inclusiveUpperBound;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.LittleEndian.readInt;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.LittleEndian.readLong;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.LittleEndian.writeInt;
-import static com.tangem.blockchain.cardano.crypto.Blake2b.Engine.LittleEndian.writeLong;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.Assert.assertFail;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.Assert.exclusiveLowerBound;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.Assert.inclusiveLowerBound;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.Assert.inclusiveUpperBound;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.LittleEndian.readInt;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.LittleEndian.readLong;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.LittleEndian.writeInt;
+import static com.tangem.blockchain.blockchains.cardano.crypto.Blake2b.Engine.LittleEndian.writeLong;
 
 
 /**  */
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/CardanoNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/CardanoNetworkManager.kt
similarity index 77%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/network/CardanoNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/CardanoNetworkManager.kt
index 1852c6b994..907dd1be92 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/CardanoNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/CardanoNetworkManager.kt
@@ -1,13 +1,13 @@
-package com.tangem.blockchain.cardano.network
+package com.tangem.blockchain.blockchains.cardano.network
 
-import com.tangem.blockchain.cardano.UnspentOutput
-import com.tangem.blockchain.cardano.network.adalite.AdaliteProvider
-import com.tangem.blockchain.cardano.network.api.AdaliteApi
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.network.API_ADALITE
-import com.tangem.blockchain.common.network.API_ADALITE_RESERVE
-import com.tangem.blockchain.common.network.createRetrofitInstance
+import com.tangem.blockchain.blockchains.cardano.UnspentOutput
+import com.tangem.blockchain.blockchains.cardano.network.adalite.AdaliteProvider
+import com.tangem.blockchain.blockchains.cardano.network.api.AdaliteApi
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_ADALITE
+import com.tangem.blockchain.network.API_ADALITE_RESERVE
+import com.tangem.blockchain.network.createRetrofitInstance
 import retrofit2.HttpException
 import java.io.IOException
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteApi.kt
similarity index 62%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteApi.kt
index ab74257edb..523a2caab7 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteApi.kt
@@ -1,10 +1,9 @@
-package com.tangem.blockchain.cardano.network.api
+package com.tangem.blockchain.blockchains.cardano.network.api
 
-import com.tangem.blockchain.cardano.network.adalite.AdaliteAddress
-import com.tangem.blockchain.cardano.network.adalite.AdaliteSendBody
-import com.tangem.blockchain.cardano.network.adalite.AdaliteUnspents
+import com.tangem.blockchain.blockchains.cardano.network.adalite.AdaliteAddress
+import com.tangem.blockchain.blockchains.cardano.network.adalite.AdaliteSendBody
+import com.tangem.blockchain.blockchains.cardano.network.adalite.AdaliteUnspents
 import retrofit2.http.*
-import shadow.okhttp3.ResponseBody
 
 interface AdaliteApi {
     @GET("/api/addresses/summary/{address}")
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteProvider.kt
similarity index 79%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteProvider.kt
index b0c242af79..972e500ced 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteProvider.kt
@@ -1,12 +1,12 @@
-package com.tangem.blockchain.cardano.network.adalite
+package com.tangem.blockchain.blockchains.cardano.network.adalite
 
 import com.squareup.moshi.Json
-import com.tangem.blockchain.cardano.network.CardanoAddressResponse
-import com.tangem.blockchain.cardano.UnspentOutput
-import com.tangem.blockchain.cardano.network.api.AdaliteApi
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
+import com.tangem.blockchain.blockchains.cardano.UnspentOutput
+import com.tangem.blockchain.blockchains.cardano.network.CardanoAddressResponse
+import com.tangem.blockchain.blockchains.cardano.network.api.AdaliteApi
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
 import com.tangem.common.extensions.hexToBytes
 import kotlinx.coroutines.async
 import kotlinx.coroutines.coroutineScope
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteResponse.kt
similarity index 94%
rename from blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteResponse.kt
index d1561ef760..3aee35cf62 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/network/adalite/AdaliteResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/cardano/network/adalite/AdaliteResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.cardano.network.adalite
+package com.tangem.blockchain.blockchains.cardano.network.adalite
 
 import com.squareup.moshi.Json
 import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddress.kt
similarity index 53%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumAddress.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddress.kt
index a301ee7e1c..5eadfafd20 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumAddress.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddress.kt
@@ -1,21 +1,16 @@
-package com.tangem.blockchain.ethereum
+package com.tangem.blockchain.blockchains.ethereum
 
+import com.tangem.blockchain.common.AddressService
 import org.kethereum.crypto.toAddress
 import org.kethereum.erc55.isValid
 import org.kethereum.model.Address
 import org.kethereum.model.PublicKey
 
-class EthereumAddressFactory {
-    companion object {
-        fun makeAddress(walletPublicKey: ByteArray): String =
-                PublicKey(walletPublicKey.sliceArray(1..64)).toAddress().hex
-    }
-}
+class EthereumAddressService : AddressService {
+    override fun makeAddress(walletPublicKey: ByteArray): String =
+            PublicKey(walletPublicKey.sliceArray(1..64)).toAddress().hex
 
-class EthereumAddressValidator {
-    companion object {
-        fun validate(address: String): Boolean = Address(address).isValid()
-    }
+    override fun validate(address: String): Boolean = Address(address).isValid()
 }
 
 enum class Chain(val id: Int) {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumWalletManager.kt
similarity index 66%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumWalletManager.kt
index f10284959d..2fbc658fe3 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/EthereumWalletManager.kt
@@ -1,13 +1,11 @@
-package com.tangem.blockchain.ethereum
+package com.tangem.blockchain.blockchains.ethereum
 
 import android.util.Log
+import com.tangem.blockchain.blockchains.ethereum.network.EthereumNetworkManager
+import com.tangem.blockchain.blockchains.ethereum.network.EthereumResponse
 import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.Token
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.ethereum.network.EthereumNetworkManager
-import com.tangem.blockchain.ethereum.network.EthereumResponse
-import com.tangem.blockchain.wallets.CurrencyWallet
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
 import com.tangem.common.CompletionResult
 import com.tangem.common.extensions.toHexString
 import org.kethereum.DEFAULT_GAS_LIMIT
@@ -21,24 +19,19 @@ import java.math.BigDecimal
 import java.math.BigInteger
 
 class EthereumWalletManager(
-        private val cardId: String,
-        private val walletPublicKey: ByteArray,
-        chain: Chain,
-        token: Token? = null,
-        override var wallet: CurrencyWallet
-) : WalletManager,
-        TransactionSender,
-        FeeProvider {
+        cardId: String,
+        wallet: Wallet,
+        private val transactionBuilder: EthereumTransactionBuilder,
+        private val networkManager: EthereumNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
+
+    private val blockchain = wallet.blockchain
 
-    override val blockchain: Blockchain = Blockchain.Ethereum
-    private val address = blockchain.makeAddress(walletPublicKey)
-    private val builder = EthereumTransactionBuilder(chain)
-    private val networkManager = EthereumNetworkManager()
     private var pendingTxCount = -1L
     private var txCount = -1L
 
     override suspend fun update() {
-        val result = networkManager.getInfo(address, wallet.balances[AmountType.Token]?.address)
+        val result = networkManager.getInfo(wallet.address, wallet.amounts[AmountType.Token]?.address)
         when (result) {
             is Result.Failure -> updateError(result.error)
             is Result.Success -> updateWallet(result.data)
@@ -46,18 +39,14 @@ class EthereumWalletManager(
     }
 
     private fun updateWallet(data: EthereumResponse) {
-        wallet.balances[AmountType.Coin]?.value = data.balance
-        wallet.balances[AmountType.Token]?.value = data.tokenBalance
+        wallet.amounts[AmountType.Coin]?.value = data.balance
+        wallet.amounts[AmountType.Token]?.value = data.tokenBalance
         txCount = data.txCount
         pendingTxCount = data.pendingTxCount
         if (txCount == pendingTxCount) {
-            wallet.pendingTransactions.forEach { it.status = TransactionStatus.Confirmed }
-        } else if (wallet.pendingTransactions.isEmpty()) {
-            wallet.pendingTransactions.add(TransactionData(
-                    Amount(blockchain.currency, decimals = blockchain.decimals),
-                    null,
-                    "unknown",
-                    wallet.address))
+            wallet.transactions.forEach { it.status = TransactionStatus.Confirmed }
+        } else if (wallet.transactions.isEmpty()) {
+            wallet.addIncomingTransaction()
         }
     }
 
@@ -67,11 +56,11 @@ class EthereumWalletManager(
     }
 
     override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult {
-        val transactionToSign = builder.buildToSign(transactionData, txCount.toBigInteger())
+        val transactionToSign = transactionBuilder.buildToSign(transactionData, txCount.toBigInteger())
                 ?: return SimpleResult.Failure(Exception("Not enough data"))
         when (val signerResponse = signer.sign(transactionToSign.hashes.toTypedArray(), cardId)) {
             is CompletionResult.Success -> {
-                val transactionToSend = builder.buildToSend(signerResponse.data.signature, transactionToSign, walletPublicKey)
+                val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature, transactionToSign)
                 return networkManager.sendTransaction(String.format("0x%s", transactionToSend.toHexString()))
             }
             is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
@@ -84,14 +73,14 @@ class EthereumWalletManager(
             is Result.Success -> {
                 val feeValues: List = result.data
                 return Result.Success(
-                        feeValues.map { Amount(blockchain.currency, it, address, blockchain.decimals) })
+                        feeValues.map { feeValue -> Amount(amount, feeValue) })
             }
             is Result.Failure -> return result
         }
     }
 }
 
-private class EthereumTransactionBuilder(private val chain: Chain) {
+class EthereumTransactionBuilder(private val walletPublicKey: ByteArray, private val chain: Chain) {
 
     fun buildToSign(transactionData: TransactionData, nonce: BigInteger?): TransactionToSign? {
 
@@ -114,7 +103,7 @@ private class EthereumTransactionBuilder(private val chain: Chain) {
         return TransactionToSign(transaction, listOf(hash))
     }
 
-    fun buildToSend(signature: ByteArray, transactionToSign: TransactionToSign, walletPublicKey: ByteArray): ByteArray {
+    fun buildToSend(signature: ByteArray, transactionToSign: TransactionToSign): ByteArray {
         val r = BigInteger(1, signature.copyOfRange(0, 32))
         val s = BigInteger(1, signature.copyOfRange(32, 64))
 
@@ -128,7 +117,7 @@ private class EthereumTransactionBuilder(private val chain: Chain) {
     }
 }
 
-private class TransactionToSign(val transaction: Transaction, val hashes: List)
+class TransactionToSign(val transaction: Transaction, val hashes: List)
 
 enum class GasLimit(val value: Long) {
     Default(21000),
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/EthereumNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumNetworkManager.kt
similarity index 91%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/network/EthereumNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumNetworkManager.kt
index 25fa28df4f..77ab787568 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/EthereumNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/EthereumNetworkManager.kt
@@ -1,11 +1,11 @@
-package com.tangem.blockchain.ethereum.network
+package com.tangem.blockchain.blockchains.ethereum.network
 
 import com.tangem.blockchain.common.Blockchain
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
-import com.tangem.blockchain.common.network.API_INFURA
-import com.tangem.blockchain.common.network.createRetrofitInstance
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
+import com.tangem.blockchain.network.API_INFURA
+import com.tangem.blockchain.network.createRetrofitInstance
 import kotlinx.coroutines.Deferred
 import kotlinx.coroutines.async
 import kotlinx.coroutines.coroutineScope
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraApi.kt
similarity index 93%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraApi.kt
index df84fae5ad..ec6845b1d0 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraApi.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.ethereum.network
+package com.tangem.blockchain.blockchains.ethereum.network
 
 import com.squareup.moshi.JsonClass
 import retrofit2.http.Body
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraProvider.kt
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraProvider.kt
index 2a04de5825..ec29d6ec6c 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraProvider.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.ethereum.network
+package com.tangem.blockchain.blockchains.ethereum.network
 
 class InfuraProvider(private val api: InfuraApi) {
     suspend fun getBalance(address: String) = api.postToInfura(createInfuraBody(InfuraMethod.GET_BALANCE, address))
diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraResponse.kt
similarity index 90%
rename from blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraResponse.kt
index 6e193290b5..7f8c2c088e 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/network/InfuraResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/ethereum/network/InfuraResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.ethereum.network
+package com.tangem.blockchain.blockchains.ethereum.network
 
 import com.squareup.moshi.Json
 import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarAddress.kt
new file mode 100644
index 0000000000..4728c0cda6
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarAddress.kt
@@ -0,0 +1,19 @@
+package com.tangem.blockchain.blockchains.stellar
+
+import com.tangem.blockchain.common.AddressService
+import org.stellar.sdk.KeyPair
+
+class StellarAddressService: AddressService {
+    override fun makeAddress(walletPublicKey: ByteArray): String {
+        val kp = KeyPair.fromPublicKey(walletPublicKey)
+        return kp.accountId
+    }
+
+    override fun validate(address: String): Boolean {
+        return try {
+            KeyPair.fromAccountId(address) != null
+        } catch (exception: IllegalArgumentException) {
+            false
+        }
+    }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarNetworkManager.kt
similarity index 90%
rename from blockchain/src/main/java/com/tangem/blockchain/stellar/StellarNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarNetworkManager.kt
index 85e5cfbd04..ec6ee2cfd8 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarNetworkManager.kt
@@ -1,10 +1,10 @@
-package com.tangem.blockchain.stellar
+package com.tangem.blockchain.blockchains.stellar
 
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.network.API_STELLAR
-import com.tangem.blockchain.common.network.API_STELLAR_TESTNET
-import com.tangem.blockchain.stellar.StellarWalletManager.Companion.STROOPS_IN_XLM
+import com.tangem.blockchain.blockchains.stellar.StellarWalletManager.Companion.STROOPS_IN_XLM
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_STELLAR
+import com.tangem.blockchain.network.API_STELLAR_TESTNET
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.async
 import kotlinx.coroutines.coroutineScope
@@ -15,7 +15,7 @@ import org.stellar.sdk.requests.ErrorResponse
 import java.io.IOException
 import java.math.BigDecimal
 
-class StellarNetworkManager(isTestNet: Boolean) {
+class StellarNetworkManager(isTestNet: Boolean = false) {
 
     val network: Network = if (isTestNet) Network.TESTNET else Network.PUBLIC
     private val stellarServer by lazy {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarTransactionBuilder.kt
similarity index 88%
rename from blockchain/src/main/java/com/tangem/blockchain/stellar/StellarTransactionBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarTransactionBuilder.kt
index ebe47c630e..e5550fe188 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarTransactionBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarTransactionBuilder.kt
@@ -1,10 +1,7 @@
-package com.tangem.blockchain.stellar
+package com.tangem.blockchain.blockchains.stellar
 
 import com.tangem.blockchain.common.AmountType
 import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.stellar.StellarWalletManager.Companion.BASE_FEE
-import com.tangem.blockchain.stellar.StellarWalletManager.Companion.STROOPS_IN_XLM
-import com.tangem.common.extensions.hexToBytes
 import org.stellar.sdk.*
 import org.stellar.sdk.xdr.AccountID
 import org.stellar.sdk.xdr.DecoratedSignature
@@ -12,7 +9,7 @@ import org.stellar.sdk.xdr.Signature
 import org.stellar.sdk.xdr.SignatureHint
 import java.util.*
 
-class StellarTransactionBuilder(private val newtorkManager: StellarNetworkManager, private val publicKey: ByteArray) {
+class StellarTransactionBuilder(private val networkManager: StellarNetworkManager, private val publicKey: ByteArray) {
 
     private lateinit var transaction: Transaction
 
@@ -22,7 +19,7 @@ class StellarTransactionBuilder(private val newtorkManager: StellarNetworkManage
         val sourceKeyPair = KeyPair.fromAccountId(transactionData.sourceAddress)
 
         if (transactionData.amount.type == AmountType.Coin) {
-            val operation = if (newtorkManager.checkIsAccountCreated(transactionData.sourceAddress)) {
+            val operation = if (networkManager.checkIsAccountCreated(transactionData.sourceAddress)) {
                 PaymentOperation.Builder(destinationKeyPair.accountId,
                         AssetTypeNative(),
                         transactionData.amount.value.toString())
@@ -64,7 +61,7 @@ class StellarTransactionBuilder(private val newtorkManager: StellarNetworkManage
         val maxTime = currentTime + 120
 
         transaction = Transaction.Builder(
-                Account(sourceKeyPair.accountId, sequence), newtorkManager.network)
+                Account(sourceKeyPair.accountId, sequence), networkManager.network)
                 .addOperation(operation)
                 .addTimeBounds(TimeBounds(minTime, maxTime))
                 .setOperationFee(fee)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarWalletManager.kt
similarity index 60%
rename from blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarWalletManager.kt
index 754cf7fa60..fc53c55460 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/stellar/StellarWalletManager.kt
@@ -1,33 +1,28 @@
-package com.tangem.blockchain.stellar
+package com.tangem.blockchain.blockchains.stellar
 
 import android.util.Log
 import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.wallets.CurrencyWallet
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
 import com.tangem.common.CompletionResult
 import java.math.BigDecimal
 import java.util.*
 
 class StellarWalletManager(
-        private val cardId: String,
-        walletPublicKey: ByteArray,
-        override var wallet: CurrencyWallet,
-        isTestNet: Boolean = false
-) : WalletManager,
-        TransactionSender,
-        FeeProvider {
+        cardId: String,
+        wallet: Wallet,
+        private val transactionBuilder: StellarTransactionBuilder,
+        private val networkManager: StellarNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
+
+    private val blockchain = wallet.blockchain
 
-    override val blockchain: Blockchain = Blockchain.Stellar
-    private val address = blockchain.makeAddress(walletPublicKey)
-    private val networkManager = StellarNetworkManager(isTestNet)
-    private val builder = StellarTransactionBuilder(networkManager, walletPublicKey)
     private var baseFee = BASE_FEE
     private var baseReserve = BASE_RESERVE
     private var sequence = 0L
 
     override suspend fun update() {
-        val result = networkManager.getInfo(address, wallet.balances[AmountType.Token]?.address)
+        val result = networkManager.getInfo(wallet.address, wallet.amounts[AmountType.Token]?.address)
         when (result) {
             is Result.Failure -> updateError(result.error)
             is Result.Success -> updateWallet(result.data)
@@ -35,15 +30,15 @@ class StellarWalletManager(
     }
 
     private fun updateWallet(data: StellarResponse) {
-        wallet.balances[AmountType.Coin]?.value = data.balance
-        wallet.balances[AmountType.Token]?.value = data.assetBalance
-        wallet.balances[AmountType.Reserve]?.value = data.baseReserve
+        wallet.amounts[AmountType.Coin]?.value = data.balance
+        wallet.amounts[AmountType.Token]?.value = data.assetBalance
+        wallet.amounts[AmountType.Reserve]?.value = data.baseReserve
         sequence = data.sequence
         baseFee = data.baseFee
         baseReserve = data.baseReserve
 
         val currentTime = Calendar.getInstance().timeInMillis
-        wallet.pendingTransactions.forEach { transaction ->
+        wallet.transactions.forEach { transaction ->
             if (transaction.date?.timeInMillis ?: 0 - currentTime > 10) {
                 transaction.status = TransactionStatus.Confirmed
             }
@@ -56,10 +51,10 @@ class StellarWalletManager(
     }
 
     override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult {
-        val hashes = builder.buildToSign(transactionData, sequence, baseFee.toStroops())
+        val hashes = transactionBuilder.buildToSign(transactionData, sequence, baseFee.toStroops())
         when (val signerResponse = signer.sign(hashes.toTypedArray(), cardId)) {
             is CompletionResult.Success -> {
-                val transactionToSend = builder.buildToSend(signerResponse.data.signature)
+                val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature)
                 return networkManager.sendTransaction(transactionToSend)
             }
             is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error)
diff --git a/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpAddress.kt
new file mode 100644
index 0000000000..9c0b49c23a
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpAddress.kt
@@ -0,0 +1,35 @@
+package com.tangem.blockchain.blockchains.xrp
+
+import com.ripple.encodings.addresses.Addresses
+import com.tangem.blockchain.common.AddressService
+import com.tangem.common.extensions.calculateRipemd160
+import com.tangem.common.extensions.calculateSha256
+import com.tangem.common.extensions.toCompressedPublicKey
+
+class XrpAddressService : AddressService {
+    override fun makeAddress(walletPublicKey: ByteArray): String {
+        val canonicalPublicKey = canonizePublicKey(walletPublicKey)
+        val publicKeyHash = canonicalPublicKey.calculateSha256().calculateRipemd160()
+        return Addresses.encodeAccountID(publicKeyHash)
+    }
+
+    override fun validate(address: String): Boolean {
+        return try {
+            Addresses.decodeAccountID(address)
+            address.startsWith("r")
+        } catch (excpetion: Exception) {
+            false
+        }
+    }
+
+    companion object {
+        fun canonizePublicKey(publicKey: ByteArray): ByteArray {
+            val compressedPublicKey = publicKey.toCompressedPublicKey()
+            return if (compressedPublicKey.size == 32) {
+                byteArrayOf(0xED.toByte()) + compressedPublicKey
+            } else {
+                compressedPublicKey
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpTransactionBuilder.kt
similarity index 86%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpTransactionBuilder.kt
index a91258d524..1906d38fb1 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpTransactionBuilder.kt
@@ -1,20 +1,21 @@
-package com.tangem.blockchain.xrp
+package com.tangem.blockchain.blockchains.xrp
 
 import com.ripple.core.coretypes.AccountID
 import com.ripple.core.coretypes.Amount
 import com.ripple.core.coretypes.uint.UInt32
 import com.ripple.crypto.ecdsa.ECDSASignature
 import com.ripple.utils.HashUtils
+import com.tangem.blockchain.blockchains.xrp.override.XrpPayment
+import com.tangem.blockchain.blockchains.xrp.override.XrpSignedTransaction
 import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.common.extensions.bigIntegerValue
-import com.tangem.blockchain.xrp.override.XrpPayment
-import com.tangem.blockchain.xrp.override.XrpSignedTransaction
+import com.tangem.blockchain.extensions.bigIntegerValue
 import org.bitcoinj.core.ECKey
 import java.math.BigInteger
 
 class XrpTransactionBuilder(walletPublicKey: ByteArray) {
-    private val canonicalPublicKey = XrpAddressFactory.canonizePublicKey(walletPublicKey)
     var sequence: Long? = null
+
+    private val canonicalPublicKey = XrpAddressService.canonizePublicKey(walletPublicKey)
     private var transaction: XrpSignedTransaction? = null
 
     fun buildToSign(transactionData: TransactionData): ByteArray {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpWalletManager.kt
similarity index 60%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpWalletManager.kt
index bb2379feb6..4301da80ad 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/XrpWalletManager.kt
@@ -1,29 +1,24 @@
-package com.tangem.blockchain.xrp
+package com.tangem.blockchain.blockchains.xrp
 
 import android.util.Log
+import com.tangem.blockchain.blockchains.xrp.network.XrpInfoResponse
+import com.tangem.blockchain.blockchains.xrp.network.XrpNetworkManager
 import com.tangem.blockchain.common.*
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.wallets.CurrencyWallet
-import com.tangem.blockchain.xrp.network.XrpInfoResponse
-import com.tangem.blockchain.xrp.network.XrpNetworkManager
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
 import com.tangem.common.CompletionResult
 
 class XrpWalletManager(
-        private val cardId: String,
-        private val walletPublicKey: ByteArray,
-        override var wallet: CurrencyWallet
-) : WalletManager,
-        TransactionSender,
-        FeeProvider {
+        cardId: String,
+        wallet: Wallet,
+        private val transactionBuilder: XrpTransactionBuilder,
+        private val networkManager: XrpNetworkManager
+) : WalletManager(cardId, wallet), TransactionSender {
 
-    override val blockchain = Blockchain.XRP
-    private val address = blockchain.makeAddress(walletPublicKey)
-    private val transactionBuilder = XrpTransactionBuilder(walletPublicKey)
-    private val networkManager = XrpNetworkManager()
+    private val blockchain = wallet.blockchain
 
     override suspend fun update() {
-        val result = networkManager.getInfo(address)
+        val result = networkManager.getInfo(wallet.address)
         when (result) {
             is Result.Success -> updateWallet(result.data)
             is Result.Failure -> updateError(result.error)
@@ -32,25 +27,19 @@ class XrpWalletManager(
 
     private fun updateWallet(response: XrpInfoResponse) {
         Log.d(this::class.java.simpleName, "Balance is ${response.balance}")
-        wallet.balances[AmountType.Reserve]?.value = response.reserveBase
+        wallet.amounts[AmountType.Reserve]?.value = response.reserveBase
 
         if (!response.accountFound) {
             updateError(Exception("Account not found")) //TODO rework, add reserve
             return
         }
-        wallet.balances[AmountType.Coin]?.value = response.balance - response.reserveBase
+        wallet.amounts[AmountType.Coin]?.value = response.balance - response.reserveBase
         transactionBuilder.sequence = response.sequence
 
         if (response.hasUnconfirmed) {
-            if (wallet.pendingTransactions.isEmpty()) {
-                wallet.pendingTransactions.add(TransactionData(
-                        Amount(blockchain.currency, decimals = blockchain.decimals),
-                        null,
-                        "unknown",
-                        wallet.address))
-            }
+            if (wallet.transactions.isEmpty()) wallet.addIncomingTransaction()
         } else {
-            wallet.pendingTransactions.clear()
+            wallet.transactions.clear()
         }
     }
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/XrpNetworkManager.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/XrpNetworkManager.kt
similarity index 84%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/network/XrpNetworkManager.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/XrpNetworkManager.kt
index 8066fe1bea..7191b98d53 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/XrpNetworkManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/XrpNetworkManager.kt
@@ -1,12 +1,12 @@
-package com.tangem.blockchain.xrp.network
+package com.tangem.blockchain.blockchains.xrp.network
 
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.network.API_RIPPLED
-import com.tangem.blockchain.common.network.API_RIPPLED_RESERVE
-import com.tangem.blockchain.common.network.createRetrofitInstance
-import com.tangem.blockchain.xrp.network.rippled.RippledApi
-import com.tangem.blockchain.xrp.network.rippled.RippledProvider
+import com.tangem.blockchain.blockchains.xrp.network.rippled.RippledApi
+import com.tangem.blockchain.blockchains.xrp.network.rippled.RippledProvider
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.network.API_RIPPLED
+import com.tangem.blockchain.network.API_RIPPLED_RESERVE
+import com.tangem.blockchain.network.createRetrofitInstance
 import retrofit2.HttpException
 import java.io.IOException
 import java.math.BigDecimal
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledApi.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledApi.kt
similarity index 94%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledApi.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledApi.kt
index e881830e69..bf4fbef679 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledApi.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledApi.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.network.rippled
+package com.tangem.blockchain.blockchains.xrp.network.rippled
 
 import retrofit2.http.Body
 import retrofit2.http.Headers
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledProvider.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledProvider.kt
similarity index 90%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledProvider.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledProvider.kt
index 73e67cd19c..bfceb241ca 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledProvider.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledProvider.kt
@@ -1,16 +1,16 @@
-package com.tangem.blockchain.xrp.network.rippled
+package com.tangem.blockchain.blockchains.xrp.network.rippled
 
+import com.tangem.blockchain.blockchains.xrp.network.XrpFeeResponse
+import com.tangem.blockchain.blockchains.xrp.network.XrpInfoResponse
 import com.tangem.blockchain.common.Blockchain
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.common.extensions.retryIO
-import com.tangem.blockchain.xrp.network.XrpFeeResponse
-import com.tangem.blockchain.xrp.network.XrpInfoResponse
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.retryIO
 import kotlinx.coroutines.async
 import kotlinx.coroutines.coroutineScope
 
 class RippledProvider(private val api: RippledApi) {
-    private val decimals = Blockchain.XRP.decimals.toInt()
+    private val decimals = Blockchain.XRP.decimals()
 
     suspend fun getInfo(address: String): Result {
         return try {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledResponse.kt b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledResponse.kt
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledResponse.kt
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledResponse.kt
index 47d91f3634..c8137a6cd5 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/network/rippled/RippledResponse.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/network/rippled/RippledResponse.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.network.rippled
+package com.tangem.blockchain.blockchains.xrp.network.rippled
 
 import com.squareup.moshi.Json
 import com.squareup.moshi.JsonClass
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpBase58.java
similarity index 98%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpBase58.java
index 3ab3f6f16a..24c47219bf 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpBase58.java
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.override;
+package com.tangem.blockchain.blockchains.xrp.override;
 
 import java.math.BigInteger;
 
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpPayment.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpPayment.java
similarity index 85%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpPayment.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpPayment.java
index 1fa01213a5..d00d8184bd 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpPayment.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpPayment.java
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.override;
+package com.tangem.blockchain.blockchains.xrp.override;
 
 
 import com.ripple.core.types.known.tx.txns.Payment;
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpSignedTransaction.java b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpSignedTransaction.java
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpSignedTransaction.java
rename to blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpSignedTransaction.java
index 926a176adb..a455b853fa 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpSignedTransaction.java
+++ b/blockchain/src/main/java/com/tangem/blockchain/blockchains/xrp/override/XrpSignedTransaction.java
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.xrp.override;
+package com.tangem.blockchain.blockchains.xrp.override;
 
 import com.ripple.core.coretypes.Amount;
 import com.ripple.core.coretypes.Blob;
diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoAddress.kt
deleted file mode 100644
index eac4edb59e..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoAddress.kt
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.tangem.blockchain.cardano
-
-import co.nstant.`in`.cbor.CborBuilder
-import co.nstant.`in`.cbor.CborDecoder
-import co.nstant.`in`.cbor.CborEncoder
-import co.nstant.`in`.cbor.model.Array
-import co.nstant.`in`.cbor.model.ByteString
-import co.nstant.`in`.cbor.model.UnsignedInteger
-import com.tangem.blockchain.cardano.crypto.Blake2b
-import com.tangem.blockchain.common.extensions.decodeBase58
-import com.tangem.blockchain.common.extensions.encodeBase58
-import org.spongycastle.crypto.util.DigestFactory
-import java.io.ByteArrayInputStream
-import java.io.ByteArrayOutputStream
-import java.util.zip.CRC32
-
-class CardanoAddressFactory {
-    companion object {
-        fun makeAddress(cardPublicKey: ByteArray, testNet: Boolean = false): String {
-            val extendedPublicKey = extendPublicKey(cardPublicKey)
-
-            val pubKeyWithAttributesBaos = ByteArrayOutputStream()
-            CborEncoder(pubKeyWithAttributesBaos).encode(CborBuilder()
-                    .addArray()
-                        .add(0)
-                            .addArray()
-                                .add(0)
-                                .add(extendedPublicKey)
-                            .end()
-                        .addMap()
-                        .end()
-                    .end()
-                    .build())
-            val pubKeyWithAttributes = pubKeyWithAttributesBaos.toByteArray()
-
-            val sha3Digest = DigestFactory.createSHA3_256()
-            sha3Digest.update(pubKeyWithAttributes, 0, pubKeyWithAttributes.size)
-            val sha3Hash = ByteArray(32)
-            sha3Digest.doFinal(sha3Hash, 0)
-
-            val blake2b = Blake2b.Digest.newInstance(28)
-            val blakeHash = blake2b.digest(sha3Hash)
-
-            val hashWithAttributesBaos = ByteArrayOutputStream()
-            CborEncoder(hashWithAttributesBaos).encode(CborBuilder()
-                    .addArray()
-                        .add(blakeHash)
-                        .addMap() //additional attributes
-                        .end()
-                        .add(0) //address type
-                    .end()
-                    .build())
-            val hashWithAttributes = hashWithAttributesBaos.toByteArray()
-
-            val crc32 = CRC32()
-            crc32.update(hashWithAttributes)
-            val checksum = crc32.value
-
-            val addressItem = CborBuilder().add(hashWithAttributes).build().get(0)
-            addressItem.setTag(24)
-
-            //addr + checksum
-            val addressBaos = ByteArrayOutputStream()
-            CborEncoder(addressBaos).encode(CborBuilder()
-                    .addArray()
-                        .add(addressItem)
-                        .add(checksum)
-                    .end()
-                    .build())
-
-            val addressBytes = addressBaos.toByteArray()
-            return addressBytes.encodeBase58()
-        }
-
-        fun extendPublicKey(publicKey: ByteArray): ByteArray {
-            val zeroBytes = ByteArray(32)
-            zeroBytes.fill(0)
-            return publicKey + zeroBytes
-        }
-    }
-}
-
-class CardanoAddressValidator {
-    companion object {
-        fun validate(address: String): Boolean {
-            val decoded = address.decodeBase58() ?: return false
-
-            return try {
-                val bais = ByteArrayInputStream(decoded)
-                val addressList =
-                        (CborDecoder(bais).decode()[0] as Array).dataItems
-                val addressItemBytes = (addressList[0] as ByteString).bytes
-                val checksum = (addressList[1] as UnsignedInteger).value.toLong()
-
-                val crc32 = CRC32()
-                crc32.update(addressItemBytes)
-                val calculatedChecksum = crc32.value
-
-                checksum == calculatedChecksum
-            } catch (e: Exception) {
-                false
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/AddressService.kt b/blockchain/src/main/java/com/tangem/blockchain/common/AddressService.kt
new file mode 100644
index 0000000000..2e408eaee2
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/AddressService.kt
@@ -0,0 +1,6 @@
+package com.tangem.blockchain.common
+
+interface AddressService {
+    fun makeAddress(walletPublicKey: ByteArray): String
+    fun validate(address: String): Boolean
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/Amount.kt b/blockchain/src/main/java/com/tangem/blockchain/common/Amount.kt
new file mode 100644
index 0000000000..ad6faa8d6e
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/Amount.kt
@@ -0,0 +1,24 @@
+package com.tangem.blockchain.common
+
+import java.math.BigDecimal
+
+data class Amount(
+        val currencySymbol: String,
+        var value: BigDecimal? = null,
+        val address: String? = null,
+        val decimals: Int,
+        val type: AmountType = AmountType.Coin
+) {
+    constructor(
+            value: BigDecimal?,
+            blockchain: Blockchain,
+            address: String? = null,
+            type: AmountType = AmountType.Coin
+    ) : this(blockchain.currency, value, address, blockchain.decimals(), type)
+
+    constructor(token: Token, value: BigDecimal? = null) :
+            this(token.symbol, value, token.contractAddress, token.decimals, AmountType.Token)
+
+    constructor(amount: Amount, value: BigDecimal) :
+            this(amount.currencySymbol, value, amount.address, amount.decimals, amount.type)
+}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/Blockchain.kt b/blockchain/src/main/java/com/tangem/blockchain/common/Blockchain.kt
index 5d98bdceef..f2be55b6f0 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/Blockchain.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/Blockchain.kt
@@ -1,74 +1,91 @@
 package com.tangem.blockchain.common
 
-import com.tangem.blockchain.binance.BinanceAddressFactory
-import com.tangem.blockchain.binance.BinanceAddressValidator
-import com.tangem.blockchain.bitcoin.BitcoinAddressFactory
-import com.tangem.blockchain.bitcoin.BitcoinAddressValidator
-import com.tangem.blockchain.cardano.CardanoAddressFactory
-import com.tangem.blockchain.cardano.CardanoAddressValidator
-import com.tangem.blockchain.ethereum.EthereumAddressFactory
-import com.tangem.blockchain.ethereum.EthereumAddressValidator
-
-import com.tangem.blockchain.stellar.StellarAddressFactory
-import com.tangem.blockchain.xrp.XrpAddressFactory
-import com.tangem.blockchain.xrp.XrpAddressValidator
+import com.tangem.blockchain.blockchains.binance.BinanceAddressService
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinAddressService
+import com.tangem.blockchain.blockchains.cardano.CardanoAddressService
+import com.tangem.blockchain.blockchains.ethereum.EthereumAddressService
+import com.tangem.blockchain.blockchains.stellar.StellarAddressService
+import com.tangem.blockchain.blockchains.xrp.XrpAddressService
 
 import java.math.BigDecimal
 
 enum class Blockchain(
         val id: String,
         val currency: String,
-        val decimals: Byte,
-        val fullName: String,
-        val pendingTransactionTimeout: Int
+        val fullName: String
 ) {
-    Unknown("", "", 0, "", 0),
-    Bitcoin("BTC", "BTC", 8, "Bitcoin", 0),
-    BitcoinTestnet("BTC/test", "BTCt", 8, "Bitcoin Testnet", 0),
-    Ethereum("ETH", "ETH", 18, "Ethereum", 0),
-    Rootstock("", "", 18, "", 0),
-    Cardano("CARDANO", "ADA", 6, "Cardano", 0),
-    XRP("XRP", "XRP", 6, "XRP Ledger", 0),
-    Binance("BINANCE", "BNB", 8, "Binance", 0),
-    BinanceTestnet("BINANCE/test", "BNBt", 8, "Binance", 0),
-    Stellar("XLM", "XLM", 7, "Stellar", 0);
+    Unknown("", "", ""),
+    Bitcoin("BTC", "BTC", "Bitcoin"),
+    BitcoinTestnet("BTC/test", "BTCt", "Bitcoin Testnet"),
+    Ethereum("ETH", "ETH", "Ethereum"),
+    Rootstock("", "", ""),
+    Cardano("CARDANO", "ADA", "Cardano"),
+    XRP("XRP", "XRP", "XRP Ledger"),
+    Binance("BINANCE", "BNB", "Binance"),
+    BinanceTestnet("BINANCE/test", "BNBt", "Binance"),
+    Stellar("XLM", "XLM", "Stellar");
 
     fun roundingMode(): Int = when (this) {
-        Bitcoin, Ethereum, Rootstock, Binance -> BigDecimal.ROUND_DOWN
+        Bitcoin, BitcoinTestnet, Ethereum, Rootstock, Binance, BinanceTestnet -> BigDecimal.ROUND_DOWN
         Cardano -> BigDecimal.ROUND_UP
         else -> BigDecimal.ROUND_HALF_UP
     }
 
-    fun makeAddress(walletPublicKey: ByteArray): String {
-        return when (this) {
-            Unknown -> throw Exception("unsupported blockchain")
-            Bitcoin -> BitcoinAddressFactory.makeAddress(walletPublicKey)
-            BitcoinTestnet -> BitcoinAddressFactory.makeAddress(walletPublicKey, testNet = true)
-            Ethereum -> EthereumAddressFactory.makeAddress(walletPublicKey)
-//            Rootstock -> RootstockAddressFactory.makeAddress(cardPublicKey)
-            Cardano -> CardanoAddressFactory.makeAddress(walletPublicKey)
-            XRP -> XrpAddressFactory.makeAddress(walletPublicKey)
-            Binance -> BinanceAddressFactory.makeAddress(walletPublicKey)
-            BinanceTestnet -> BinanceAddressFactory.makeAddress(walletPublicKey, testNet = true)
-            Stellar -> StellarAddressFactory.makeAddress(walletPublicKey)
-            else -> throw Exception("unsupported blockchain")
-        }
+    fun decimals(): Int = when (this) {
+        Bitcoin, BitcoinTestnet, Binance, BinanceTestnet -> 8
+        Cardano, XRP -> 6
+        Ethereum, Rootstock -> 18
+        Stellar -> 7
+        Unknown -> 0
     }
 
-    fun validateAddress(address: String): Boolean {
-        return when (this) {
-            Unknown -> throw Exception("unsupported blockchain")
-            Bitcoin -> BitcoinAddressValidator.validate(address)
-            BitcoinTestnet -> BitcoinAddressValidator.validate(address, testNet = true)
-            Ethereum -> EthereumAddressValidator.validate(address)
-//            Rootstock -> RootstockAddressValidator.validate(address)
-            Cardano -> CardanoAddressValidator.validate(address)
-            XRP -> XrpAddressValidator.validate(address)
-            Binance -> BinanceAddressValidator.validate(address)
-            BinanceTestnet -> BinanceAddressValidator.validate(address, testNet = true)
-//            Stellar -> StellarAddressValidator.validate(address)
-            else -> throw Exception("unsupported blockchain")
+    fun pendingTransactionsTimeout(): Int = when (this) {
+        else -> 0
+    }
+
+    fun makeAddress(walletPublicKey: ByteArray): String = getAddressService().makeAddress(walletPublicKey)
+
+    fun validateAddress(address: String): Boolean = getAddressService().validate(address)
+
+    private fun getAddressService(): AddressService = when (this) {
+        Unknown -> throw Exception("unsupported blockchain")
+        Bitcoin -> BitcoinAddressService()
+        BitcoinTestnet -> BitcoinAddressService(true)
+        Ethereum -> EthereumAddressService()
+        Rootstock -> throw Exception("unsupported blockchain")
+        Cardano -> CardanoAddressService()
+        XRP -> XrpAddressService()
+        Binance -> BinanceAddressService()
+        BinanceTestnet -> BinanceAddressService(true)
+        Stellar -> StellarAddressService()
+    }
+
+    fun getShareUri(address: String): String = when (this) {
+        Bitcoin -> "bitcoin:$address"
+        Ethereum -> "ethereum:$address"
+        XRP -> "ripple:$address"
+        else -> address
+    }
+
+    fun getExploreUrl(address: String, token: Token? = null): String = when (this) {
+        Binance -> "https://explorer.binance.org/address/$address"
+        Bitcoin -> "https://blockchain.info/address/$address"
+        Cardano -> "https://cardanoexplorer.com/address/$address"
+        Ethereum -> if (token == null) {
+            "https://etherscan.io/address/"
+        } else {
+            "https://etherscan.io/token/${token.contractAddress}?a=$address"
         }
+        Rootstock -> {
+            var url = "https://explorer.rsk.co/address/$address"
+            if (token != null) {
+                url += "?__tab=tokens"
+            }
+            url
+        }
+        Stellar -> "https://stellar.expert/explorer/public/account/$address"
+        XRP -> "https://xrpscan.com/account/$address"
+        else -> throw Exception("Explore URL not defined!")
     }
 
     companion object {
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/TransactionData.kt b/blockchain/src/main/java/com/tangem/blockchain/common/TransactionData.kt
new file mode 100644
index 0000000000..d1774c0b99
--- /dev/null
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/TransactionData.kt
@@ -0,0 +1,19 @@
+package com.tangem.blockchain.common
+
+import java.util.*
+
+data class TransactionData(
+        val amount: Amount,
+        val fee: Amount?,
+        val sourceAddress: String,
+        val destinationAddress: String,
+        val contractAddress: String? = null,
+        var status: TransactionStatus = TransactionStatus.Unconfirmed,
+        var date: Calendar? = null,
+        val hash: String? = null
+)
+
+
+enum class TransactionStatus { Confirmed, Unconfirmed }
+
+enum class TransactionError { WrongAmount, WrongFee, WrongTotal }
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/Wallet.kt b/blockchain/src/main/java/com/tangem/blockchain/common/Wallet.kt
index 6cca63b075..6f03468733 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/Wallet.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/Wallet.kt
@@ -3,53 +3,68 @@ package com.tangem.blockchain.common
 import java.math.BigDecimal
 import java.util.*
 
-interface Wallet {
-    val config: WalletConfig
-    val address: String
-    val exploreUrl: String?
-    val shareUrl: String?
-}
-
-class WalletConfig(
-        val allowFeeSelection: Boolean,
-        val allowFeeInclusion: Boolean,
-        var allowExtract: Boolean = false,
-        var allowLoad: Boolean = false
-)
-
-data class Amount(
-        val currencySymbol: String,
-        var value: BigDecimal? = null,
-        val address: String? = null,
-        val decimals: Byte,
-        val type: AmountType = AmountType.Coin
+class Wallet(
+        val blockchain: Blockchain,
+        val address: String,
+        val token: Token? = null
 ) {
-    constructor(
-            value: BigDecimal?,
-            blockchain: Blockchain,
-            address: String? = null,
-            type: AmountType = AmountType.Coin
-    ) : this(blockchain.currency, value, address, blockchain.decimals, type)
+    val exploreUrl: String
+    val shareUrl: String
+    val transactions: MutableList = mutableListOf()
+    val amounts: MutableMap = mutableMapOf()
 
-    constructor(token: Token, value: BigDecimal? = null) :
-            this(token.symbol, value, token.contractAddress, token.decimals, AmountType.Token)
+    init {
+        setAmount(Amount(null, blockchain, address))
+        if (token != null) setAmount(Amount(token))
+
+        exploreUrl = blockchain.getExploreUrl(address, token)
+        shareUrl = blockchain.getShareUri(address)
+    }
+
+    fun setAmount(amount: Amount) {
+        amounts[amount.type] = amount
+    }
+
+    fun setCoinValue(value: BigDecimal) {
+        val amount = Amount(value, blockchain, address)
+        setAmount(amount)
+    }
+
+    fun setTokenValue(value: BigDecimal) {
+        if (token != null) {
+            val amount = Amount(token, value)
+            setAmount(amount)
+        }
+    }
+
+    fun setReserveValue(value: BigDecimal) {
+        val amount = Amount(value, blockchain, address, AmountType.Reserve)
+        setAmount(amount)
+    }
+
+    fun addTransaction(transaction: TransactionData) {
+        transactions.add(transaction.copy(date = Calendar.getInstance()))
+    }
+
+    fun addIncomingTransaction() {
+        val dummyAmount = Amount(null, blockchain)
+        val transaction = TransactionData(dummyAmount, dummyAmount,
+                "unknown", address, date = Calendar.getInstance()
+        )
+        transactions.add(transaction)
+    }
+
+    fun fundsAvailable(amountType: AmountType): BigDecimal {
+        return amounts[amountType]?.value ?: BigDecimal.ZERO
+    }
+
+//    fun validateTransaction(amount: Amount, fee: Amount?): EnumSet {
+//        TODO("not implemented")
+//    }
 }
 
-data class TransactionData(
-        val amount: Amount,
-        val fee: Amount?,
-        val sourceAddress: String,
-        val destinationAddress: String,
-        var status: TransactionStatus = TransactionStatus.Unconfirmed,
-        var date: Calendar? = null
-)
-
 enum class AmountType { Coin, Token, Reserve }
 
-enum class TransactionStatus { Confirmed, Unconfirmed }
-
-enum class ValidationError { WrongAmount, WrongFee, WrongTotal }
-
 interface TransactionValidator {
-    fun validateTransaction(amount: Amount, fee: Amount?): EnumSet
+    fun validateTransaction(amount: Amount, fee: Amount?): EnumSet
 }
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt
index 6fe5a862ea..3271af9575 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt
@@ -1,26 +1,48 @@
 package com.tangem.blockchain.common
 
-import com.tangem.blockchain.common.extensions.Result
-import com.tangem.blockchain.common.extensions.SimpleResult
-import com.tangem.blockchain.wallets.CurrencyWallet
+import com.tangem.blockchain.extensions.Result
+import com.tangem.blockchain.extensions.SimpleResult
+import com.tangem.blockchain.extensions.isAboveZero
 import com.tangem.commands.SignResponse
 import com.tangem.common.CompletionResult
+import java.math.BigDecimal
+import java.util.*
 
-interface WalletManager {
-    var wallet: CurrencyWallet
-    val blockchain: Blockchain
+abstract class WalletManager(val cardId: String, var wallet: Wallet) {
 
-    suspend fun update()
+    abstract suspend fun update()
+
+    fun createTransaction(amount: Amount, fee: Amount, destination: String): TransactionData {
+        return TransactionData(amount, fee,
+                    wallet.address, destination, wallet.token?.contractAddress,
+                    TransactionStatus.Unconfirmed, Calendar.getInstance(), null)
+    }
+
+    fun validateTransaction(amount: Amount, fee: Amount?): EnumSet {
+        val errors = EnumSet.noneOf(TransactionError::class.java)
+
+        if (!validateAmount(amount)) errors.add(TransactionError.WrongAmount)
+        if (fee == null) return errors
+
+        if (!validateAmount(fee)) errors.add(TransactionError.WrongFee)
+        val total = (amount.value ?: BigDecimal.ZERO) + (fee.value ?: BigDecimal.ZERO)
+        if (!validateAmount(Amount(amount, total))) errors.add(TransactionError.WrongTotal)
+
+        return errors
+    }
+
+    private fun validateAmount(amount: Amount): Boolean {
+        return !amount.isAboveZero() &&
+                wallet.fundsAvailable(amount.type) >= amount.value
+    }
 }
 
 interface TransactionSender {
-    suspend fun send(transactionData: TransactionData, signer: TransactionSigner) : SimpleResult
+    suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult
+    suspend fun getFee(amount: Amount, destination: String): Result>
+
 }
 
 interface TransactionSigner {
     suspend fun sign(hashes: Array, cardId: String): CompletionResult
-}
-
-interface FeeProvider {
-    suspend fun getFee(amount: Amount, destination: String): Result>
 }
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt
index 3b2d48fb04..e0a28e9678 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt
@@ -1,14 +1,25 @@
 package com.tangem.blockchain.common
 
-import com.tangem.blockchain.binance.BinanceWalletManager
-import com.tangem.blockchain.bitcoin.BitcoinWalletManager
-import com.tangem.blockchain.cardano.CardanoWalletManager
-import com.tangem.blockchain.ethereum.Chain
-import com.tangem.blockchain.ethereum.EthereumWalletManager
+import com.tangem.blockchain.blockchains.binance.BinanceTransactionBuilder
+import com.tangem.blockchain.blockchains.binance.BinanceWalletManager
+import com.tangem.blockchain.blockchains.binance.network.BinanceNetworkManager
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinTransactionBuilder
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinWalletManager
+import com.tangem.blockchain.blockchains.bitcoin.network.BitcoinNetworkManager
+import com.tangem.blockchain.blockchains.cardano.CardanoTransactionBuilder
+import com.tangem.blockchain.blockchains.cardano.CardanoWalletManager
+import com.tangem.blockchain.blockchains.cardano.network.CardanoNetworkManager
+import com.tangem.blockchain.blockchains.ethereum.Chain
+import com.tangem.blockchain.blockchains.ethereum.EthereumTransactionBuilder
+import com.tangem.blockchain.blockchains.ethereum.EthereumWalletManager
+import com.tangem.blockchain.blockchains.ethereum.network.EthereumNetworkManager
+import com.tangem.blockchain.blockchains.stellar.StellarNetworkManager
+import com.tangem.blockchain.blockchains.stellar.StellarTransactionBuilder
 
-import com.tangem.blockchain.stellar.StellarWalletManager
-import com.tangem.blockchain.wallets.CurrencyWallet
-import com.tangem.blockchain.xrp.XrpWalletManager
+import com.tangem.blockchain.blockchains.stellar.StellarWalletManager
+import com.tangem.blockchain.blockchains.xrp.XrpTransactionBuilder
+import com.tangem.blockchain.blockchains.xrp.XrpWalletManager
+import com.tangem.blockchain.blockchains.xrp.network.XrpNetworkManager
 import com.tangem.commands.Card
 
 object WalletManagerFactory {
@@ -18,69 +29,72 @@ object WalletManagerFactory {
         val blockchainName: String = card.cardData?.blockchainName ?: return null
         val blockchain = Blockchain.fromId(blockchainName)
 
-        val token = getToken(card)
-        val wallet = CurrencyWallet.newInstance(blockchain, blockchain.makeAddress(walletPublicKey), token)
+        val cardId = card.cardId
 
+        val token = getToken(card)
+
+        val wallet = Wallet(blockchain, blockchain.makeAddress(walletPublicKey), token)
 
         when (blockchain) {
             Blockchain.Bitcoin -> {
                 return BitcoinWalletManager(
-                        cardId = card.cardId,
-                        walletPublicKey = walletPublicKey,
-                        wallet = wallet
+                        card.cardId, wallet,
+                        BitcoinTransactionBuilder(walletPublicKey),
+                        BitcoinNetworkManager()
                 )
             }
             Blockchain.BitcoinTestnet -> {
                 return BitcoinWalletManager(
-                        cardId = card.cardId,
-                        walletPublicKey = walletPublicKey,
-                        wallet = wallet,
-                        isTestNet = true
+                        card.cardId, wallet,
+                        BitcoinTransactionBuilder(walletPublicKey, true),
+                        BitcoinNetworkManager(true)
                 )
             }
             Blockchain.Ethereum -> {
                 val chain = Chain.Mainnet
                 return EthereumWalletManager(
-                        cardId = card.cardId,
-                        walletPublicKey = walletPublicKey,
-                        wallet = wallet,
-                        chain = chain
+                        cardId, wallet,
+                        EthereumTransactionBuilder(walletPublicKey, chain),
+                        EthereumNetworkManager()
                 )
             }
             Blockchain.Stellar -> {
+                val networkManager = StellarNetworkManager()
+
                 return StellarWalletManager(
-                        cardId = card.cardId,
-                        walletPublicKey = walletPublicKey,
-                        wallet = wallet
+                        cardId, wallet,
+                        StellarTransactionBuilder(networkManager, walletPublicKey),
+                        networkManager
                 )
             }
             Blockchain.Cardano -> {
                 return CardanoWalletManager(
-                        cardId = card.cardId,
-                        walletPublicKey = walletPublicKey,
-                        wallet = wallet
+                        cardId, wallet,
+                        CardanoTransactionBuilder(walletPublicKey),
+                        CardanoNetworkManager()
                 )
             }
             Blockchain.XRP -> {
                 return XrpWalletManager(
-                        cardId = card.cardId,
-                        walletPublicKey = walletPublicKey,
-                        wallet = wallet
+                        cardId, wallet,
+                        XrpTransactionBuilder(walletPublicKey),
+                        XrpNetworkManager()
                 )
             }
             Blockchain.Binance -> {
+                val networkManager = BinanceNetworkManager()
                 return BinanceWalletManager(
-                        cardId = card.cardId,
-                        walletPublicKey = walletPublicKey,
-                        wallet = wallet
+                        cardId, wallet,
+                        BinanceTransactionBuilder(walletPublicKey, networkManager.client),
+                        networkManager
                 )
             }
             Blockchain.BinanceTestnet -> {
+                val networkManager = BinanceNetworkManager(true)
                 return BinanceWalletManager(
-                        cardId = card.cardId,
-                        walletPublicKey = walletPublicKey,
-                        wallet = wallet,
-                        isTestNet = true
+                        cardId, wallet,
+                        BinanceTransactionBuilder(walletPublicKey, networkManager.client, true),
+                        networkManager
                 )
             }
             else -> return null
@@ -91,13 +105,12 @@ object WalletManagerFactory {
         val symbol = card.cardData?.tokenSymbol ?: return null
         val contractAddress = card.cardData?.tokenContractAddress ?: return null
         val decimals = card.cardData?.tokenDecimal ?: return null
-        return Token(symbol, contractAddress, decimals.toByte())
+        return Token(symbol, contractAddress, decimals)
     }
 }
 
-
 data class Token(
         val symbol: String,
         val contractAddress: String,
-        val decimals: Byte
+        val decimals: Int
 )
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/Amount.kt
similarity index 55%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/Amount.kt
index 8a9f4445e1..9c76097bc5 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/Amount.kt
@@ -1,8 +1,13 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
 
 import com.tangem.blockchain.common.Amount
 import java.math.BigInteger
 
 fun Amount.bigIntegerValue(): BigInteger? {
     return this.value?.movePointRight(this.decimals.toInt())?.toBigInteger()
+}
+
+fun Amount.isAboveZero(): Boolean {
+    val value = this.value ?: return false
+    return value.signum() == 1
 }
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/BitInteger.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/BitInteger.kt
similarity index 83%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/BitInteger.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/BitInteger.kt
index 6ac80e1bbd..09299f4e86 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/BitInteger.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/BitInteger.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
 
 import org.bitcoinj.core.ECKey
 import java.math.BigInteger
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/ByteArray.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/ByteArray.kt
similarity index 83%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/ByteArray.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/ByteArray.kt
index 29ce488afc..8b251179ca 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/ByteArray.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/ByteArray.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
 
 import android.util.Base64
 import org.bitcoinj.core.Base58
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/Coroutines.kt
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/Coroutines.kt
index 8451a23b67..52e65b7046 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/Coroutines.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
 
 import com.tangem.TangemSdk
 import com.tangem.blockchain.common.TransactionSigner
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/String.kt b/blockchain/src/main/java/com/tangem/blockchain/extensions/String.kt
similarity index 83%
rename from blockchain/src/main/java/com/tangem/blockchain/common/extensions/String.kt
rename to blockchain/src/main/java/com/tangem/blockchain/extensions/String.kt
index 8f14abf5f8..149d43ab34 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/String.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/extensions/String.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.extensions
+package com.tangem.blockchain.extensions
 
 import org.bitcoinj.core.AddressFormatException
 import org.bitcoinj.core.Base58
diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/network/RetrofitBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/network/RetrofitBuilder.kt
similarity index 97%
rename from blockchain/src/main/java/com/tangem/blockchain/common/network/RetrofitBuilder.kt
rename to blockchain/src/main/java/com/tangem/blockchain/network/RetrofitBuilder.kt
index dec399633b..a3ecaaac41 100644
--- a/blockchain/src/main/java/com/tangem/blockchain/common/network/RetrofitBuilder.kt
+++ b/blockchain/src/main/java/com/tangem/blockchain/network/RetrofitBuilder.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.common.network
+package com.tangem.blockchain.network
 
 import com.squareup.moshi.Moshi
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarAddress.kt
deleted file mode 100644
index 605d8f3e2e..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarAddress.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.tangem.blockchain.stellar
-
-import org.stellar.sdk.KeyPair
-
-class StellarAddressFactory {
-    companion object {
-        fun makeAddress(cardPublicKey: ByteArray): String {
-            val kp = KeyPair.fromPublicKey(cardPublicKey)
-            return kp.accountId
-        }
-    }
-}
-
-class StellarAddressValidator {
-    companion object {
-        fun validate(address: String): Boolean {
-            return try {
-                KeyPair.fromAccountId(address) != null
-            } catch (exception: IllegalArgumentException) {
-                false
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/wallets/CurrencyWallet.kt b/blockchain/src/main/java/com/tangem/blockchain/wallets/CurrencyWallet.kt
deleted file mode 100644
index 7710b95439..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/wallets/CurrencyWallet.kt
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.tangem.blockchain.wallets
-
-import com.tangem.blockchain.common.*
-import java.util.*
-
-class CurrencyWallet(
-        val blockchain: Blockchain,
-        address: String,
-        override val config: WalletConfig
-) : Wallet, TransactionValidator {
-
-    override val exploreUrl: String? = null
-    override val shareUrl: String? = null
-    override val address: String
-        get() = balances[AmountType.Coin]!!.address!!
-
-    val pendingTransactions: MutableList = mutableListOf()
-    val balances: MutableMap = mutableMapOf()
-
-    init {
-        addAmount(Amount(null, blockchain, address))
-    }
-
-    override fun validateTransaction(amount: Amount, fee: Amount?): EnumSet {
-        TODO("not implemented")
-    }
-
-    fun addAmount(amount: Amount) {
-        balances[amount.type] = amount
-    }
-
-    fun addPendingTransaction(transaction: TransactionData) {
-        pendingTransactions.add(transaction.copy(date = Calendar.getInstance()))
-    }
-
-    companion object {
-        fun newInstance(blockchain: Blockchain, address: String, token: Token?): CurrencyWallet {
-
-            return when (blockchain) {
-                Blockchain.Bitcoin, Blockchain.BitcoinTestnet, Blockchain.XRP -> {
-                    val config = WalletConfig(true, true)
-                    CurrencyWallet(blockchain, address, config)
-                }
-                Blockchain.Cardano, Blockchain.Binance, Blockchain.BinanceTestnet -> {
-                    val config = WalletConfig(false, true)
-                    CurrencyWallet(blockchain, address, config)
-                }
-                Blockchain.Ethereum -> {
-                    val config = WalletConfig(true, token == null)
-                    val wallet = CurrencyWallet(blockchain, address, config)
-                    if (token != null) wallet.addAmount(Amount(token))
-                    wallet
-                }
-                Blockchain.Stellar -> {
-                    val config = WalletConfig(false, token == null)
-                    val wallet = CurrencyWallet(blockchain, address, config)
-                    if (token != null) wallet.addAmount(Amount(token))
-                    wallet.addAmount(Amount(null, blockchain, address, AmountType.Reserve))
-                    wallet
-                }
-                else -> throw Exception("Unsupported blockchain")
-            }
-
-        }
-    }
-}
\ No newline at end of file
diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpAddress.kt b/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpAddress.kt
deleted file mode 100644
index 2bd702f67f..0000000000
--- a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpAddress.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.tangem.blockchain.xrp
-
-import com.ripple.encodings.addresses.Addresses
-import com.tangem.common.extensions.calculateRipemd160
-import com.tangem.common.extensions.calculateSha256
-import com.tangem.common.extensions.toCompressedPublicKey
-
-class XrpAddressFactory {
-    companion object {
-        fun makeAddress(walletPublicKey: ByteArray): String {
-            val canonicalPublicKey = canonizePublicKey(walletPublicKey)
-            val publicKeyHash = canonicalPublicKey.calculateSha256().calculateRipemd160()
-            return Addresses.encodeAccountID(publicKeyHash)
-        }
-
-        fun canonizePublicKey(publicKey: ByteArray): ByteArray {
-            val compressedPublicKey = publicKey.toCompressedPublicKey()
-            return if (compressedPublicKey.size == 32) {
-                byteArrayOf(0xED.toByte()) + compressedPublicKey
-            } else {
-                compressedPublicKey
-            }
-        }
-    }
-}
-
-class XrpAddressValidator {
-    companion object {
-        fun validate(address: String): Boolean {
-            return try {
-                Addresses.decodeAccountID(address)
-                address.startsWith("r")
-            } catch (excpetion: Exception) {
-                false
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/binance/BinanceAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/binance/BinanceAddressTest.kt
similarity index 72%
rename from blockchain/src/test/java/com/tangem/blockchain/binance/BinanceAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/binance/BinanceAddressTest.kt
index 7501ec0105..3293a1fe37 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/binance/BinanceAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/binance/BinanceAddressTest.kt
@@ -1,23 +1,26 @@
-package com.tangem.blockchain.binance
+package com.tangem.blockchain.blockchains.binance
 
 import com.google.common.truth.Truth
 import com.tangem.common.extensions.hexToBytes
 import org.junit.Test
 
 internal class BinanceAddressTest {
+
+    private val addressService = BinanceAddressService()
+
     @Test
     fun makeAddressFromCorrectPublicKey() {
         val walletPublicKey = "04E3F3BE3CE3D8284DB3BA073AD0291040093D83C11A277B905D5555C9EC41073E103F4D9D299EDEA8285C51C3356A8681A545618C174251B984DF841F49D2376F".hexToBytes()
         val expected = "bnb1m9wu5ncxk8mqhm3nfmxa552728wkty700rzhvu"
 
-        Truth.assertThat(BinanceAddressFactory.makeAddress(walletPublicKey))
+        Truth.assertThat(addressService.makeAddress(walletPublicKey))
                 .isEqualTo(expected)
     }
 
     @Test
     fun validateCorrectAddress() {
         val address = "bnb1m9wu5ncxk8mqhm3nfmxa552728wkty700rzhvu"
-        Truth.assertThat(BinanceAddressValidator.validate(address))
+        Truth.assertThat(addressService.validate(address))
                 .isTrue()
     }
 }
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/bitcoin/BitcoinAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressTest.kt
similarity index 71%
rename from blockchain/src/test/java/com/tangem/blockchain/bitcoin/BitcoinAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressTest.kt
index ea4b181980..c8b7cca7ef 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/bitcoin/BitcoinAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/bitcoin/BitcoinAddressTest.kt
@@ -1,25 +1,26 @@
-package com.tangem.blockchain.bitcoin
+package com.tangem.blockchain.blockchains.bitcoin
 
 import com.google.common.truth.Truth
 import com.tangem.common.extensions.hexToBytes
 import org.junit.Test
-import org.junit.jupiter.api.Assertions.*
 
 class BitcoinAddressTest {
 
+    private val addressService = BitcoinAddressService()
+
     @Test
     fun makeAddressFromCorrectPublicKey() {
         val walletPublicKey = "04752A727E14BBA5BD73B6714D72500F61FFD11026AD1196D2E1C54577CBEEAC3D11FC68A64700F8D533F4E311964EA8FB3AA26C588295F2133868D69C3E628693".hexToBytes()
         val expected = "1D3vYSjCvzrsVVK5bNaPTjU3NxcN7NNXMN"
 
-        Truth.assertThat(BitcoinAddressFactory.makeAddress(walletPublicKey))
+        Truth.assertThat(addressService.makeAddress(walletPublicKey))
                 .isEqualTo(expected)
     }
 
     @Test
     fun validateCorrectAddress() {
         val address = "1D3vYSjCvzrsVVK5bNaPTjU3NxcN7NNXMN"
-        Truth.assertThat(BitcoinAddressValidator.validate(address))
+        Truth.assertThat(addressService.validate(address))
                 .isTrue()
     }
 }
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/ethereum/EthereumAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressTest.kt
similarity index 72%
rename from blockchain/src/test/java/com/tangem/blockchain/ethereum/EthereumAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressTest.kt
index b1325c8493..d445d379f7 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/ethereum/EthereumAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/ethereum/EthereumAddressTest.kt
@@ -1,4 +1,4 @@
-package com.tangem.blockchain.ethereum
+package com.tangem.blockchain.blockchains.ethereum
 
 import com.google.common.truth.Truth
 import com.tangem.common.extensions.hexToBytes
@@ -6,19 +6,21 @@ import org.junit.Test
 
 internal class EthereumAddressTest {
 
+    private val addressService = EthereumAddressService()
+
     @Test
     fun makeAddressFromCorrectPublicKey() {
         val walletPublicKey = "04BAEC8CD3BA50FDFE1E8CF2B04B58E17041245341CD1F1C6B3A496B48956DB4C896A6848BCF8FCFC33B88341507DD25E5F4609386C68086C74CF472B86E5C3820".hexToBytes()
         val expected = "0xc63763572d45171e4c25ca0818b44e5dd7f5c15b"
 
-        Truth.assertThat(EthereumAddressFactory.makeAddress(walletPublicKey))
+        Truth.assertThat(addressService.makeAddress(walletPublicKey))
                 .isEqualTo(expected)
     }
 
     @Test
     fun validateCorrectAddress() {
         val address = "0xc63763572d45171e4c25ca0818b44e5dd7f5c15b"
-        Truth.assertThat(EthereumAddressValidator.validate(address))
+        Truth.assertThat(addressService.validate(address))
                 .isTrue()
     }
 }
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/stellar/StellarAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/stellar/StellarAddressTest.kt
similarity index 71%
rename from blockchain/src/test/java/com/tangem/blockchain/stellar/StellarAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/stellar/StellarAddressTest.kt
index 5c6f18561f..e53d557e53 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/stellar/StellarAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/stellar/StellarAddressTest.kt
@@ -1,23 +1,26 @@
-package com.tangem.blockchain.stellar
+package com.tangem.blockchain.blockchains.stellar
 
 import com.google.common.truth.Truth
 import com.tangem.common.extensions.hexToBytes
 import org.junit.Test
 
 internal class StellarAddressTest {
+
+    private val addressService = StellarAddressService()
+
     @Test
     fun makeAddressFromCorrectPublicKey() {
         val walletPublicKey = "EC5387D8B38BD9EF80BDBC78D0D7E1C53F08E269436C99D5B3C2DF4B2CE73012".hexToBytes()
         val expected = "GDWFHB6YWOF5T34AXW6HRUGX4HCT6CHCNFBWZGOVWPBN6SZM44YBFUDZ"
 
-        Truth.assertThat(StellarAddressFactory.makeAddress(walletPublicKey))
+        Truth.assertThat(addressService.makeAddress(walletPublicKey))
                 .isEqualTo(expected)
     }
 
     @Test
     fun validateCorrectAddress() {
         val address = "GDWFHB6YWOF5T34AXW6HRUGX4HCT6CHCNFBWZGOVWPBN6SZM44YBFUDZ"
-        Truth.assertThat(StellarAddressValidator.validate(address))
+        Truth.assertThat(addressService.validate(address))
                 .isTrue()
     }
 }
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/blockchains/xrp/XrpAddressTest.kt
similarity index 74%
rename from blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt
rename to blockchain/src/test/java/com/tangem/blockchain/blockchains/xrp/XrpAddressTest.kt
index 1f82c1f777..a6d2f97a91 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/blockchains/xrp/XrpAddressTest.kt
@@ -1,16 +1,19 @@
-package com.tangem.blockchain.xrp
+package com.tangem.blockchain.blockchains.xrp
 
 import com.google.common.truth.Truth
 import com.tangem.common.extensions.hexToBytes
 import org.junit.Test
 
 internal class XrpAddressTest {
+
+    private val addressService = XrpAddressService()
+
     @Test
     fun makeAddressFromCorrectSecpPublicKey() {
         val walletPublicKey = "04D2B9FB288540D54E5B32ECAF0381CD571F97F6F1ECD036B66BB11AA52FFE9981110D883080E2E255C6B1640586F7765E6FAA325D1340F49B56B83D9DE56BC7ED".hexToBytes()
         val expected = "rNxCXgKaCMAmowENKnYa5r8Ue78rjgrM6B"
 
-        Truth.assertThat(XrpAddressFactory.makeAddress(walletPublicKey))
+        Truth.assertThat(addressService.makeAddress(walletPublicKey))
                 .isEqualTo(expected)
     }
 
@@ -19,14 +22,14 @@ internal class XrpAddressTest {
         val walletPublicKey = "12CC4DE73BACF875D7423D152E46C1A665F1718CBE7CA0FEB2BA28C149E11909".hexToBytes()
         val expected = "rwWMNBs2GtJwfX7YNVV1sUYaPy6DRmDHB4"
 
-        Truth.assertThat(XrpAddressFactory.makeAddress(walletPublicKey))
+        Truth.assertThat(addressService.makeAddress(walletPublicKey))
                 .isEqualTo(expected)
     }
 
     @Test
     fun validateCorrectAddress() {
         val address = "rwWMNBs2GtJwfX7YNVV1sUYaPy6DRmDHB4"
-        Truth.assertThat(XrpAddressValidator.validate(address))
+        Truth.assertThat(addressService.validate(address))
                 .isTrue()
     }
 }
\ No newline at end of file
diff --git a/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt b/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt
index 32ab0256cb..9c15645ed2 100644
--- a/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt
+++ b/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt
@@ -2,12 +2,12 @@ package com.tangem.blockchain.common
 
 import com.google.common.truth.Truth
 import com.tangem.SessionEnvironment
-import com.tangem.blockchain.binance.BinanceWalletManager
-import com.tangem.blockchain.bitcoin.BitcoinWalletManager
-import com.tangem.blockchain.cardano.CardanoWalletManager
-import com.tangem.blockchain.ethereum.EthereumWalletManager
-import com.tangem.blockchain.stellar.StellarWalletManager
-import com.tangem.blockchain.xrp.XrpWalletManager
+import com.tangem.blockchain.blockchains.binance.BinanceWalletManager
+import com.tangem.blockchain.blockchains.bitcoin.BitcoinWalletManager
+import com.tangem.blockchain.blockchains.cardano.CardanoWalletManager
+import com.tangem.blockchain.blockchains.ethereum.EthereumWalletManager
+import com.tangem.blockchain.blockchains.stellar.StellarWalletManager
+import com.tangem.blockchain.blockchains.xrp.XrpWalletManager
 import com.tangem.commands.ReadCommand
 import com.tangem.common.apdu.ResponseApdu
 import com.tangem.common.extensions.hexToBytes