diff --git a/app/src/androidTest/kotlin/wallet/android/app/tokens/TestValidateTokenAddress.kt b/app/src/androidTest/kotlin/wallet/android/app/tokens/TestValidateTokenAddress.kt
index cecc6e3fe..60cf99fe8 100644
--- a/app/src/androidTest/kotlin/wallet/android/app/tokens/TestValidateTokenAddress.kt
+++ b/app/src/androidTest/kotlin/wallet/android/app/tokens/TestValidateTokenAddress.kt
@@ -1,11 +1,5 @@
package wallet.android.app.tokens
-import com.gemwallet.android.blockchain.clients.aptos.AptosGetTokenClient
-import com.gemwallet.android.blockchain.clients.ethereum.EvmGetTokenClient
-import com.gemwallet.android.blockchain.clients.solana.SolanaTokenClient
-import com.gemwallet.android.blockchain.clients.sui.SuiGetTokenClient
-import com.gemwallet.android.blockchain.clients.ton.TonGetTokenClient
-import com.gemwallet.android.blockchain.clients.tron.TronGetTokenClient
import junit.framework.TestCase.assertFalse
import junit.framework.TestCase.assertTrue
import org.junit.Test
diff --git a/app/src/main/assets/swap/orca.svg b/app/src/main/assets/swap/orca.svg
deleted file mode 100644
index 21fcf7fdd..000000000
--- a/app/src/main/assets/swap/orca.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/app/src/main/kotlin/com/gemwallet/android/data/password/PreferencePasswordStore.kt b/app/src/main/kotlin/com/gemwallet/android/data/password/PreferencePasswordStore.kt
index a558e23f5..69091f677 100644
--- a/app/src/main/kotlin/com/gemwallet/android/data/password/PreferencePasswordStore.kt
+++ b/app/src/main/kotlin/com/gemwallet/android/data/password/PreferencePasswordStore.kt
@@ -8,6 +8,7 @@ import androidx.security.crypto.MasterKey
import com.gemwallet.android.blockchain.operators.PasswordStore
import com.gemwallet.android.math.toHexString
import java.security.SecureRandom
+import androidx.core.content.edit
class PreferencePasswordStore(
private val context: Context,
@@ -18,10 +19,9 @@ class PreferencePasswordStore(
override fun createPassword(walletId: String): String {
val key = ByteArray(16)
random.nextBytes(key)
- getStore()
- .edit()
- .putString(walletId, key.toHexString())
- .commit()
+ getStore().edit(commit = true) {
+ putString(walletId, key.toHexString())
+ }
return key.toHexString()
}
diff --git a/app/src/main/kotlin/com/gemwallet/android/di/DataModule.kt b/app/src/main/kotlin/com/gemwallet/android/di/DataModule.kt
index 7c3d026c9..55d662bc0 100644
--- a/app/src/main/kotlin/com/gemwallet/android/di/DataModule.kt
+++ b/app/src/main/kotlin/com/gemwallet/android/di/DataModule.kt
@@ -1,83 +1,32 @@
package com.gemwallet.android.di
-import com.gemwallet.android.blockchain.RpcClientAdapter
-import com.gemwallet.android.blockchain.clients.ActivationTransactionPreloader
-import com.gemwallet.android.blockchain.clients.ApprovalTransactionPreloader
-import com.gemwallet.android.blockchain.clients.BroadcastClientProxy
-import com.gemwallet.android.blockchain.clients.GenericTransferPreloader
-import com.gemwallet.android.blockchain.clients.NftTransactionPreloader
-import com.gemwallet.android.blockchain.clients.NodeStatusClientProxy
-import com.gemwallet.android.blockchain.clients.SignClientProxy
-import com.gemwallet.android.blockchain.clients.StakeTransactionPreloader
-import com.gemwallet.android.blockchain.clients.SwapTransactionPreloader
-import com.gemwallet.android.blockchain.clients.TokenTransferPreloader
-import com.gemwallet.android.blockchain.clients.algorand.AlgorandBroadcastClient
-import com.gemwallet.android.blockchain.clients.algorand.AlgorandNodeStatusClient
import com.gemwallet.android.blockchain.clients.algorand.AlgorandSignClient
-import com.gemwallet.android.blockchain.clients.algorand.AlgorandSignPreloadClient
-import com.gemwallet.android.blockchain.clients.aptos.AptosBroadcastClient
-import com.gemwallet.android.blockchain.clients.aptos.AptosNodeStatusClient
import com.gemwallet.android.blockchain.clients.aptos.AptosSignClient
-import com.gemwallet.android.blockchain.clients.aptos.AptosSignerPreloader
-import com.gemwallet.android.blockchain.clients.bitcoin.BitcoinBroadcastClient
-import com.gemwallet.android.blockchain.clients.bitcoin.BitcoinNodeStatusClient
import com.gemwallet.android.blockchain.clients.bitcoin.BitcoinSignClient
-import com.gemwallet.android.blockchain.clients.bitcoin.BitcoinSignerPreloader
-import com.gemwallet.android.blockchain.clients.cardano.CardanoBroadcastClient
-import com.gemwallet.android.blockchain.clients.cardano.CardanoNodeStatusClient
import com.gemwallet.android.blockchain.clients.cardano.CardanoSignClient
-import com.gemwallet.android.blockchain.clients.cardano.CardanoSignerPreloaderClient
-import com.gemwallet.android.blockchain.clients.cosmos.CosmosBroadcastClient
-import com.gemwallet.android.blockchain.clients.cosmos.CosmosNodeStatusClient
import com.gemwallet.android.blockchain.clients.cosmos.CosmosSignClient
-import com.gemwallet.android.blockchain.clients.cosmos.CosmosSignerPreloader
-import com.gemwallet.android.blockchain.clients.ethereum.EvmBroadcastClient
-import com.gemwallet.android.blockchain.clients.ethereum.EvmNodeStatusClient
import com.gemwallet.android.blockchain.clients.ethereum.EvmSignClient
-import com.gemwallet.android.blockchain.clients.ethereum.EvmSignerPreloader
-import com.gemwallet.android.blockchain.clients.near.NearBroadcastClient
-import com.gemwallet.android.blockchain.clients.near.NearNodeStatusClient
+import com.gemwallet.android.blockchain.clients.hyper.HyperCoreSignClient
import com.gemwallet.android.blockchain.clients.near.NearSignClient
-import com.gemwallet.android.blockchain.clients.near.NearSignerPreloader
-import com.gemwallet.android.blockchain.clients.polkadot.PolkadotBroadcastClient
-import com.gemwallet.android.blockchain.clients.polkadot.PolkadotNodeStatusClient
import com.gemwallet.android.blockchain.clients.polkadot.PolkadotSignClient
-import com.gemwallet.android.blockchain.clients.polkadot.PolkadotSignerPreloaderClient
-import com.gemwallet.android.blockchain.clients.solana.SolanaBroadcastClient
-import com.gemwallet.android.blockchain.clients.solana.SolanaNodeStatusClient
import com.gemwallet.android.blockchain.clients.solana.SolanaSignClient
-import com.gemwallet.android.blockchain.clients.solana.SolanaSignerPreloader
-import com.gemwallet.android.blockchain.clients.stellar.StellarBroadcastClient
-import com.gemwallet.android.blockchain.clients.stellar.StellarNodeStatusClient
import com.gemwallet.android.blockchain.clients.stellar.StellarSignClient
-import com.gemwallet.android.blockchain.clients.stellar.StellarSignPreloadClient
-import com.gemwallet.android.blockchain.clients.sui.SuiBroadcastClient
-import com.gemwallet.android.blockchain.clients.sui.SuiNodeStatusClient
import com.gemwallet.android.blockchain.clients.sui.SuiSignClient
-import com.gemwallet.android.blockchain.clients.sui.SuiSignerPreloader
-import com.gemwallet.android.blockchain.clients.ton.TonBroadcastClient
-import com.gemwallet.android.blockchain.clients.ton.TonNodeStatusClient
import com.gemwallet.android.blockchain.clients.ton.TonSignClient
-import com.gemwallet.android.blockchain.clients.ton.TonSignerPreloader
-import com.gemwallet.android.blockchain.clients.tron.TronBroadcastClient
-import com.gemwallet.android.blockchain.clients.tron.TronNodeStatusClient
import com.gemwallet.android.blockchain.clients.tron.TronSignClient
-import com.gemwallet.android.blockchain.clients.tron.TronSignerPreloader
-import com.gemwallet.android.blockchain.clients.xrp.XrpBroadcastClient
-import com.gemwallet.android.blockchain.clients.xrp.XrpNodeStatusClient
import com.gemwallet.android.blockchain.clients.xrp.XrpSignClient
-import com.gemwallet.android.blockchain.clients.xrp.XrpSignerPreloader
-import com.gemwallet.android.cases.device.GetDeviceIdCase
+import com.gemwallet.android.blockchain.services.BroadcastService
+import com.gemwallet.android.blockchain.services.NodeStatusService
+import com.gemwallet.android.blockchain.services.SignClientProxy
+import com.gemwallet.android.blockchain.services.SignerPreloaderProxy
import com.gemwallet.android.cases.device.SyncSubscription
import com.gemwallet.android.cases.transactions.SyncTransactions
import com.gemwallet.android.data.repositoreis.assets.AssetsRepository
import com.gemwallet.android.data.repositoreis.buy.BuyRepository
import com.gemwallet.android.data.repositoreis.session.SessionRepository
import com.gemwallet.android.data.repositoreis.wallets.WalletsRepository
-import com.gemwallet.android.data.services.gemapi.GemApiClient
import com.gemwallet.android.ext.available
import com.gemwallet.android.ext.toChainType
-import com.gemwallet.android.services.SignerPreloaderProxy
import com.gemwallet.android.services.SyncService
import com.wallet.core.primitives.Chain
import com.wallet.core.primitives.ChainType
@@ -85,6 +34,7 @@ import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
+import uniffi.gemstone.GemGateway
import javax.inject.Singleton
@InstallIn(SingletonComponent::class)
@@ -94,66 +44,18 @@ object DataModule {
@Provides
@Singleton
fun providesBroadcastProxy(
- rpcClients: RpcClientAdapter,
- ): BroadcastClientProxy = BroadcastClientProxy(
- Chain.available().map {
- when (it.toChainType()) {
- ChainType.Bitcoin -> BitcoinBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Ethereum -> EvmBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Solana -> SolanaBroadcastClient(it, rpcClients.getClient(Chain.Solana))
- ChainType.Cosmos -> CosmosBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Ton -> TonBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Tron -> TronBroadcastClient(it, rpcClients.getClient(Chain.Tron))
- ChainType.Aptos -> AptosBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Sui -> SuiBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Xrp -> XrpBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Near -> NearBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Algorand -> AlgorandBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Stellar -> StellarBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Polkadot -> PolkadotBroadcastClient(it, rpcClients.getClient(it))
- ChainType.Cardano -> CardanoBroadcastClient(it, rpcClients.getClient(it))
- }
- },
+ gateway: GemGateway,
+ ): BroadcastService = BroadcastService(
+ gateway = gateway,
)
@Provides
@Singleton
fun provideSignerPreloader(
- rpcClients: RpcClientAdapter,
- gemApiClient: GemApiClient,
- sessionRepository: SessionRepository,
- getDeviceIdCase: GetDeviceIdCase,
+ gateway: GemGateway,
): SignerPreloaderProxy {
- val preloaders = Chain.available().map {
- when (it.toChainType()) {
- ChainType.Bitcoin -> BitcoinSignerPreloader(it, rpcClients.getClient(it), rpcClients.getClient(it))
- ChainType.Ethereum -> EvmSignerPreloader(it, rpcClients.getClient(it), rpcClients.getClient(it))
- ChainType.Solana -> SolanaSignerPreloader(it, rpcClients.getClient(Chain.Solana), rpcClients.getClient(Chain.Solana), rpcClients.getClient(Chain.Solana))
- ChainType.Cosmos -> CosmosSignerPreloader(it, rpcClients.getClient(it))
- ChainType.Ton -> TonSignerPreloader(it, rpcClients.getClient(it))
- ChainType.Tron -> TronSignerPreloader(it, rpcClients.getClient(it), rpcClients.getClient(it), rpcClients.getClient(it))
- ChainType.Aptos -> AptosSignerPreloader(it, rpcClients.getClient(it), rpcClients.getClient(it))
- ChainType.Sui -> SuiSignerPreloader(it, rpcClients.getClient(it))
- ChainType.Xrp -> XrpSignerPreloader(it, rpcClients.getClient(it))
- ChainType.Near -> NearSignerPreloader(it, rpcClients.getClient(it))
- ChainType.Algorand -> AlgorandSignPreloadClient(it, rpcClients.getClient(it))
- ChainType.Stellar -> StellarSignPreloadClient(it, rpcClients.getClient(it), rpcClients.getClient(it))
- ChainType.Polkadot -> PolkadotSignerPreloaderClient(it, rpcClients.getClient(it), rpcClients.getClient(it), rpcClients.getClient(it))
- ChainType.Cardano -> CardanoSignerPreloaderClient(it, rpcClients.getClient(it))
- }
- }
return SignerPreloaderProxy(
- gemApiClient = gemApiClient,
- sessionRepository = sessionRepository,
- getDeviceIdCase = getDeviceIdCase,
- nativeTransferClients = preloaders,
- tokenTransferClients = preloaders.mapNotNull { it as? TokenTransferPreloader },
- stakeTransactionClients = preloaders.mapNotNull { it as? StakeTransactionPreloader },
- swapTransactionClients = preloaders.mapNotNull { it as? SwapTransactionPreloader },
- approvalTransactionClients = preloaders.mapNotNull { it as? ApprovalTransactionPreloader },
- activatePreloaderClients = preloaders.mapNotNull { it as? ActivationTransactionPreloader },
- genericPreloaderClients = preloaders.mapNotNull { it as? GenericTransferPreloader },
- nftPreloadClients = preloaders.mapNotNull { it as? NftTransactionPreloader },
+ gateway = gateway,
)
}
@@ -178,6 +80,7 @@ object DataModule {
ChainType.Stellar -> StellarSignClient(it)
ChainType.Polkadot -> PolkadotSignClient(it)
ChainType.Cardano -> CardanoSignClient(it)
+ ChainType.HyperCore -> HyperCoreSignClient(it)
}
},
)
@@ -185,28 +88,9 @@ object DataModule {
@Singleton
@Provides
fun provideNodeStatusClient(
- rpcClients: RpcClientAdapter,
- ): NodeStatusClientProxy {
- return NodeStatusClientProxy(
- Chain.available().map {
- when (it.toChainType()) {
- ChainType.Ethereum -> EvmNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Bitcoin -> BitcoinNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Solana -> SolanaNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Cosmos -> CosmosNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Ton -> TonNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Tron -> TronNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Aptos -> AptosNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Sui -> SuiNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Xrp -> XrpNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Near -> NearNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Algorand -> AlgorandNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Stellar -> StellarNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Polkadot -> PolkadotNodeStatusClient(it, rpcClients.getClient(it))
- ChainType.Cardano -> CardanoNodeStatusClient(it, rpcClients.getClient(it))
- }
- }
- )
+ gateway: GemGateway,
+ ): NodeStatusService {
+ return NodeStatusService(gateway)
}
@Singleton
diff --git a/app/src/main/kotlin/com/gemwallet/android/di/GatewayModule.kt b/app/src/main/kotlin/com/gemwallet/android/di/GatewayModule.kt
new file mode 100644
index 000000000..2b0299cb8
--- /dev/null
+++ b/app/src/main/kotlin/com/gemwallet/android/di/GatewayModule.kt
@@ -0,0 +1,32 @@
+package com.gemwallet.android.di
+
+import android.content.Context
+import com.gemwallet.android.data.repositoreis.config.SecurityGemPreferences
+import com.gemwallet.android.data.repositoreis.config.SharedGemPreferences
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
+import uniffi.gemstone.AlienProvider
+import uniffi.gemstone.GemGateway
+import javax.inject.Singleton
+
+@InstallIn(SingletonComponent::class)
+@Module
+object GatewayModule {
+ @Provides
+ @Singleton
+ fun provideGateway(
+ alienProvider: AlienProvider,
+ @ApplicationContext context: Context,
+ ): GemGateway {
+ return GemGateway(
+ alienProvider,
+ SharedGemPreferences(
+ context.getSharedPreferences("gateway_preferences", Context.MODE_PRIVATE)
+ ),
+ SecurityGemPreferences(context)
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/kotlin/com/gemwallet/android/features/bridge/request/RequestScene.kt b/app/src/main/kotlin/com/gemwallet/android/features/bridge/request/RequestScene.kt
index f6b9169d8..e86f09d04 100644
--- a/app/src/main/kotlin/com/gemwallet/android/features/bridge/request/RequestScene.kt
+++ b/app/src/main/kotlin/com/gemwallet/android/features/bridge/request/RequestScene.kt
@@ -126,7 +126,7 @@ private fun Render(
}
item { PropertyItem("Method", request.method) }
when (request.method) {
- WalletConnectionMethods.solana_sign_transaction.string -> {}
+ WalletConnectionMethods.SolanaSignTransaction.string -> {}
else -> item {
Spacer(modifier = Modifier.size(24.dp))
Surface(shadowElevation = 16.dp, color = MaterialTheme.colorScheme.background) {
diff --git a/app/src/main/kotlin/com/gemwallet/android/features/bridge/request/RequestViewModel.kt b/app/src/main/kotlin/com/gemwallet/android/features/bridge/request/RequestViewModel.kt
index c9dda162f..d0fed1c9f 100644
--- a/app/src/main/kotlin/com/gemwallet/android/features/bridge/request/RequestViewModel.kt
+++ b/app/src/main/kotlin/com/gemwallet/android/features/bridge/request/RequestViewModel.kt
@@ -3,9 +3,9 @@ package com.gemwallet.android.features.bridge.request
import androidx.core.net.toUri
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.gemwallet.android.blockchain.clients.SignClientProxy
import com.gemwallet.android.blockchain.operators.LoadPrivateKeyOperator
import com.gemwallet.android.blockchain.operators.PasswordStore
+import com.gemwallet.android.blockchain.services.SignClientProxy
import com.gemwallet.android.data.repositoreis.bridge.BridgesRepository
import com.gemwallet.android.data.repositoreis.bridge.getNamespace
import com.gemwallet.android.data.repositoreis.wallets.WalletsRepository
@@ -70,8 +70,8 @@ class RequestViewModel @Inject constructor(
}
val params = when (request.request.method) {
- WalletConnectionMethods.solana_sign_message.string,
- WalletConnectionMethods.eth_sign.string -> {
+ WalletConnectionMethods.SolanaSignMessage.string,
+ WalletConnectionMethods.EthSign.string -> {
val data = JSONArray(request.request.params).getString(1)
String(data.decodeHex())
}
@@ -80,7 +80,7 @@ class RequestViewModel @Inject constructor(
val data = JSONArray(request.request.params).getString(1)
data
}
- WalletConnectionMethods.personal_sign.string -> {
+ WalletConnectionMethods.PersonalSign.string -> {
val data = JSONArray(request.request.params).getString(0)
try {
String(data.decodeHex())
@@ -88,9 +88,9 @@ class RequestViewModel @Inject constructor(
data
}
}
- WalletConnectionMethods.eth_send_transaction.string -> request.request.params
- WalletConnectionMethods.solana_sign_and_send_transaction.string,
- WalletConnectionMethods.solana_sign_transaction.string -> {
+ WalletConnectionMethods.EthSendTransaction.string -> request.request.params
+ WalletConnectionMethods.SolanaSignAndSendTransaction.string,
+ WalletConnectionMethods.SolanaSignTransaction.string -> {
val params = JSONObject(request.request.params).getString("transaction")
params
}
@@ -109,7 +109,7 @@ class RequestViewModel @Inject constructor(
fun onSent(hash: String) {
val sessionRequest = state.value.sessionRequest ?: return
val data = when (state.value.sessionRequest?.request?.method) {
- WalletConnectionMethods.solana_sign_transaction.string -> jsonEncoder.encodeToString(WCSolanaSignMessageResult(signature = hash))
+ WalletConnectionMethods.SolanaSignTransaction.string -> jsonEncoder.encodeToString(WCSolanaSignMessageResult(signature = hash))
else -> hash
}
@@ -153,8 +153,8 @@ class RequestViewModel @Inject constructor(
val sign = try {
when (method) {
- WalletConnectionMethods.eth_sign,
- WalletConnectionMethods.personal_sign -> {
+ WalletConnectionMethods.EthSign,
+ WalletConnectionMethods.PersonalSign -> {
val data = state.value.params.toByteArray()
val decoder = SignMessageDecoder(SignMessage(SignDigestType.EIP191, data))
@@ -164,11 +164,11 @@ class RequestViewModel @Inject constructor(
val param = decoder.hash()
signClient.signMessage(chain, param, privateKey).toHexString()
}
- WalletConnectionMethods.eth_sign_typed_data,
- WalletConnectionMethods.eth_sign_typed_data_v4 -> {
+ WalletConnectionMethods.EthSignTypedData,
+ WalletConnectionMethods.EthSignTypedDataV4 -> {
signClient.signTypedMessage(chain, state.value.params.toByteArray(), privateKey).toHexString()
}
- WalletConnectionMethods.solana_sign_message -> {
+ WalletConnectionMethods.SolanaSignMessage -> {
val param = state.value.params.toByteArray()
signClient.signMessage(chain, param, privateKey).toHexString()
}
@@ -255,7 +255,7 @@ private data class RequestViewModelState(
),
params = params,
)
- WalletConnectionMethods.eth_send_transaction.string -> {
+ WalletConnectionMethods.EthSendTransaction.string -> {
try {
val jObj = JSONArray(params).getJSONObject(0)
val to = jObj.getString("to")
@@ -271,19 +271,35 @@ private data class RequestViewModelState(
RequestSceneState.Error("Argument error: ${err.message}")
}
}
- WalletConnectionMethods.solana_sign_transaction.string -> RequestSceneState.SignGeneric(
+ WalletConnectionMethods.SolanaSignTransaction.string -> RequestSceneState.SignGeneric(
ConfirmParams.TransferParams.Generic(
asset = chain.asset(),
from = account,
memo = params,
+ name = sessionRequest.peerMetaData?.name ?: "",
+ description = sessionRequest.peerMetaData?.description ?: "",
+ url = sessionRequest.peerMetaData?.url ?: "",
+ icon = sessionRequest.peerMetaData?.icons?.firstOrNull() ?: "",
+ redirectNative = sessionRequest.peerMetaData?.icons?.firstOrNull() ?: "",
+ redirectUniversal = sessionRequest.peerMetaData?.icons?.firstOrNull() ?: "",
+ gasLimit = "",
+ gasPrice = "",
inputType = ConfirmParams.TransferParams.InputType.Signature
)
)
- WalletConnectionMethods.solana_sign_and_send_transaction.string -> RequestSceneState.SignGeneric(
+ WalletConnectionMethods.SolanaSignAndSendTransaction.string -> RequestSceneState.SignGeneric(
ConfirmParams.TransferParams.Generic(
asset = chain.asset(),
from = account,
memo = params,
+ name = sessionRequest.peerMetaData?.name ?: "",
+ description = sessionRequest.peerMetaData?.description ?: "",
+ url = sessionRequest.peerMetaData?.url ?: "",
+ icon = sessionRequest.peerMetaData?.icons?.firstOrNull() ?: "",
+ redirectNative = sessionRequest.peerMetaData?.icons?.firstOrNull() ?: "",
+ redirectUniversal = sessionRequest.peerMetaData?.icons?.firstOrNull() ?: "",
+ gasLimit = "",
+ gasPrice = "",
inputType = ConfirmParams.TransferParams.InputType.EncodeTransaction
)
)
diff --git a/app/src/main/kotlin/com/gemwallet/android/features/confirm/viewmodels/ConfirmViewModel.kt b/app/src/main/kotlin/com/gemwallet/android/features/confirm/viewmodels/ConfirmViewModel.kt
index 827996f86..ee0f58d17 100644
--- a/app/src/main/kotlin/com/gemwallet/android/features/confirm/viewmodels/ConfirmViewModel.kt
+++ b/app/src/main/kotlin/com/gemwallet/android/features/confirm/viewmodels/ConfirmViewModel.kt
@@ -3,10 +3,11 @@ package com.gemwallet.android.features.confirm.viewmodels
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.gemwallet.android.blockchain.clients.BroadcastClientProxy
-import com.gemwallet.android.blockchain.clients.SignClientProxy
import com.gemwallet.android.blockchain.operators.LoadPrivateKeyOperator
import com.gemwallet.android.blockchain.operators.PasswordStore
+import com.gemwallet.android.blockchain.services.BroadcastService
+import com.gemwallet.android.blockchain.services.SignClientProxy
+import com.gemwallet.android.blockchain.services.SignerPreloaderProxy
import com.gemwallet.android.cases.transactions.CreateTransaction
import com.gemwallet.android.data.repositoreis.assets.AssetsRepository
import com.gemwallet.android.data.repositoreis.session.SessionRepository
@@ -26,7 +27,6 @@ import com.gemwallet.android.model.Session
import com.gemwallet.android.model.SignerParams
import com.gemwallet.android.model.format
import com.gemwallet.android.serializer.jsonEncoder
-import com.gemwallet.android.services.SignerPreloaderProxy
import com.gemwallet.android.ui.R
import com.gemwallet.android.ui.components.CellEntity
import com.gemwallet.android.ui.components.InfoSheetEntity
@@ -74,7 +74,7 @@ class ConfirmViewModel @Inject constructor(
private val passwordStore: PasswordStore,
private val loadPrivateKeyOperator: LoadPrivateKeyOperator,
private val signClient: SignClientProxy,
- private val broadcastClientProxy: BroadcastClientProxy,
+ private val broadcastService: BroadcastService,
private val createTransactionsCase: CreateTransaction,
private val stakeRepository: StakeRepository,
private val savedStateHandle: SavedStateHandle,
@@ -95,7 +95,7 @@ class ConfirmViewModel @Inject constructor(
private val assetsInfo = request.filterNotNull().mapNotNull {
if (it is ConfirmParams.SwapParams) {
- listOf(it.fromAsset.id, it.toAssetId)
+ listOf(it.fromAsset.id, it.toAsset.id)
} else {
listOf(it.assetId)
}
@@ -111,14 +111,7 @@ class ConfirmViewModel @Inject constructor(
}
val preload = try {
- val result = signerPreload.preload(params = request)
- when (request) {
- is ConfirmParams.SwapParams -> if (result.scanTransaction?.isMalicious != false) {
- throw Exception("Transaction payload error")
- }
- else -> {}
- }
- result
+ signerPreload.preload(params = request)
} catch (err: Throwable) {
state.update { ConfirmState.Error(ConfirmError.PreloadError(err.message ?: "Preload error")) }
return@map null
@@ -129,8 +122,8 @@ class ConfirmViewModel @Inject constructor(
params.input is ConfirmParams.Stake.RewardsParams -> stakeRepository.getRewards(params.input.assetId, params.input.from.address)
.map { BigInteger(it.base.rewards) }
.fold(BigInteger.ZERO) { acc, value -> acc + value }
- params.input.isMax() && params.input.assetId == params.chainData.fee(feePriority).feeAssetId ->
- params.input.amount - params.chainData.fee(feePriority).amount
+ params.input.isMax() && params.input.assetId == params.fee(feePriority).feeAssetId ->
+ params.input.amount - params.fee(feePriority).amount
else -> params.input.amount
}
state.update { ConfirmState.Ready }
@@ -145,7 +138,7 @@ class ConfirmViewModel @Inject constructor(
.stateIn(viewModelScope, SharingStarted.Eagerly, null)
private val feeAssetInfo = preloadData.filterNotNull().flatMapLatest { signerParams ->
- assetsRepository.getAssetInfo(signerParams.chainData.fee().feeAssetId)
+ assetsRepository.getAssetInfo(signerParams.fee().feeAssetId)
}
.stateIn(viewModelScope, SharingStarted.Eagerly, null)
@@ -153,7 +146,7 @@ class ConfirmViewModel @Inject constructor(
val fromAssetId = request?.assetId ?: return@combine null
val assetInfo = assetsInfo?.getByAssetId(fromAssetId) ?: return@combine null
val toAssetInfo = if (request is ConfirmParams.SwapParams) {
- assetsInfo.getByAssetId(request.toAssetId) ?: return@combine null
+ assetsInfo.getByAssetId(request.toAsset.id) ?: return@combine null
} else {
null
}
@@ -192,8 +185,8 @@ class ConfirmViewModel @Inject constructor(
.flowOn(Dispatchers.Default)
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
- val feeValue = combine(preloadData, feeAssetInfo, state, feePriority) { signerParams, feeAssetInfo, state, speed ->
- val amount = signerParams?.chainData?.fee(speed)?.amount
+ val feeValue = combine(preloadData, feeAssetInfo, state, feePriority) { signerParams, feeAssetInfo, state, feePriority ->
+ val amount = signerParams?.fee(feePriority)?.amount
if (amount == null || feeAssetInfo == null) {
return@combine ""
}
@@ -203,8 +196,8 @@ class ConfirmViewModel @Inject constructor(
.flowOn(Dispatchers.Default)
.stateIn(viewModelScope, SharingStarted.Eagerly, "")
- val feeUIModel = combine(preloadData, feeAssetInfo, state, feePriority) { signerParams, feeAssetInfo, state, speed ->
- val amount = signerParams?.chainData?.fee(speed)?.amount
+ val feeUIModel = combine(preloadData, feeAssetInfo, state, feePriority) { signerParams, feeAssetInfo, state, priority ->
+ val amount = signerParams?.fee(priority)?.amount
val result = if (amount == null || feeAssetInfo == null) {
CellEntity(
label = R.string.transfer_network_fee,
@@ -255,7 +248,7 @@ class ConfirmViewModel @Inject constructor(
.flowOn(Dispatchers.Default)
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
- val allFee = preloadData.filterNotNull().map { it.chainData.allFee() }
+ val allFee = preloadData.filterNotNull().map { it.allFee() }
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
fun init(params: ConfirmParams) {
@@ -285,7 +278,7 @@ class ConfirmViewModel @Inject constructor(
val account = assetInfo?.owner
val feeAssetInfo = feeAssetInfo.value
val session = sessionRepository.getSession()
- val txSpeed = feePriority.value
+ val feePriority = this@ConfirmViewModel.feePriority.value
try {
if (assetInfo == null || account == null || session == null || feeAssetInfo == null) {
@@ -293,12 +286,12 @@ class ConfirmViewModel @Inject constructor(
}
validateBalance(
signerParams,
- txSpeed,
+ feePriority,
assetInfo,
feeAssetInfo,
getBalance(assetInfo, signerParams.input),
)
- val signs = sign(signerParams, session, assetInfo, txSpeed)
+ val signs = sign(signerParams, session, assetInfo, feePriority)
when (signerParams.input) {
is ConfirmParams.TransferParams.Generic -> {
when ((signerParams.input as ConfirmParams.TransferParams.Generic).inputType) {
@@ -316,8 +309,8 @@ class ConfirmViewModel @Inject constructor(
else -> {}
}
for (sign in signs) {
- val txHash = broadcastClientProxy.send(account, sign, signerParams.input.getTxType())
- if (sign != signs.last()) {
+ val txHash = broadcastService.send(account, sign, signerParams.input.getTxType())
+ if (!sign.contentEquals(signs.last())) {
delay(500)
} else {
addTransaction(txHash)
@@ -367,9 +360,9 @@ class ConfirmViewModel @Inject constructor(
is ConfirmParams.Activate,
is ConfirmParams.NftParams,
is ConfirmParams.Stake.DelegateParams -> assetInfo.balance.balance.available.toBigInteger()
- is ConfirmParams.Stake.RedelegateParams -> BigInteger(stakeRepository.getDelegation(params.srcValidatorId).firstOrNull()?.base?.balance ?: "0")
- is ConfirmParams.Stake.UndelegateParams -> BigInteger(stakeRepository.getDelegation(params.validatorId, params.delegationId).firstOrNull()?.base?.balance ?: "0")
- is ConfirmParams.Stake.WithdrawParams -> BigInteger(stakeRepository.getDelegation(params.validatorId, params.delegationId).firstOrNull()?.base?.balance ?: "0")
+ is ConfirmParams.Stake.RedelegateParams -> BigInteger(stakeRepository.getDelegation(params.delegation.validator.id).firstOrNull()?.base?.balance ?: "0")
+ is ConfirmParams.Stake.UndelegateParams -> BigInteger(stakeRepository.getDelegation(params.delegation.validator.id, params.delegation.base.delegationId).firstOrNull()?.base?.balance ?: "0")
+ is ConfirmParams.Stake.WithdrawParams -> BigInteger(stakeRepository.getDelegation(params.delegation.validator.id, params.delegation.base.delegationId).firstOrNull()?.base?.balance ?: "0")
is ConfirmParams.Stake.RewardsParams -> stakeRepository.getRewards(assetInfo.asset.id, assetInfo.owner?.address ?: "")
.fold(BigInteger.ZERO) { acc, delegation -> acc + BigInteger(delegation.base.balance) }
}
@@ -377,10 +370,10 @@ class ConfirmViewModel @Inject constructor(
private suspend fun getValidator(params: ConfirmParams): DelegationValidator? {
val validatorId = when (params) {
- is ConfirmParams.Stake.DelegateParams -> params.validatorId
- is ConfirmParams.Stake.RedelegateParams -> params.dstValidatorId
- is ConfirmParams.Stake.UndelegateParams -> params.validatorId
- is ConfirmParams.Stake.WithdrawParams -> params.validatorId
+ is ConfirmParams.Stake.DelegateParams -> params.validator.id
+ is ConfirmParams.Stake.RedelegateParams -> params.dstValidator.id
+ is ConfirmParams.Stake.UndelegateParams -> params.delegation.base.validatorId
+ is ConfirmParams.Stake.WithdrawParams -> params.delegation.base.validatorId
is ConfirmParams.Activate,
is ConfirmParams.Stake.RewardsParams,
is ConfirmParams.SwapParams,
@@ -456,7 +449,7 @@ class ConfirmViewModel @Inject constructor(
jsonEncoder.encodeToString(
TransactionSwapMetadata(
fromAsset = input.fromAsset.id,
- toAsset = input.toAssetId,
+ toAsset = input.toAsset.id,
fromValue = input.fromAmount.toString(),
toValue = input.toAmount.toString(),
provider = input.protocolId,
@@ -472,7 +465,7 @@ class ConfirmViewModel @Inject constructor(
val assetInfo = assetsInfo.value?.getByAssetId(signerParams?.input?.assetId ?: return) ?: return
val session = sessionRepository.getSession()
val destinationAddress = signerParams.input.destination()?.address ?: ""
- val txSpeed = feePriority.value
+ val priority = feePriority.value
createTransactionsCase.createTransaction(
hash = txHash,
@@ -481,7 +474,7 @@ class ConfirmViewModel @Inject constructor(
owner = assetInfo.owner!!,
to = destinationAddress,
state = TransactionState.Pending,
- fee = signerParams.chainData.fee(txSpeed),
+ fee = signerParams.fee(priority),
amount = signerParams.finalAmount,
memo = signerParams.input.memo() ?: "",
type = signerParams.input.getTxType(),
@@ -491,7 +484,7 @@ class ConfirmViewModel @Inject constructor(
} else {
TransactionDirection.Outgoing
},
- blockNumber = signerParams.chainData.blockNumber()
+ blockNumber = signerParams.data(feePriority.value).chainData.blockNumber()
)
}
@@ -504,7 +497,7 @@ class ConfirmViewModel @Inject constructor(
assetBalance: BigInteger,
) {
val amount = signerParams.finalAmount
- val feeAmount = signerParams.chainData.fee(feePriority).amount
+ val feeAmount = signerParams.fee(feePriority).amount
val totalAmount = when (signerParams.input.getTxType()) {
TransactionType.Transfer,
@@ -518,6 +511,10 @@ class ConfirmViewModel @Inject constructor(
TransactionType.StakeWithdraw,
TransactionType.TransferNFT -> amount
TransactionType.SmartContractCall -> TODO()
+ TransactionType.PerpetualOpenPosition -> TODO()
+ TransactionType.PerpetualClosePosition -> TODO()
+ TransactionType.StakeFreeze -> TODO()
+ TransactionType.StakeUnfreeze -> TODO()
}
if (assetBalance < totalAmount) {
@@ -525,7 +522,6 @@ class ConfirmViewModel @Inject constructor(
throw ConfirmError.InsufficientBalance(label)
}
if (feeAssetInfo.balance.balance.available.toBigInteger() < feeAmount) {
- val label = "${feeAssetInfo.id().chain.asset().name} (${feeAssetInfo.asset.symbol})"
throw ConfirmError.InsufficientFee(chain = feeAssetInfo.asset.chain)
}
}
diff --git a/app/src/main/kotlin/com/gemwallet/android/features/import_wallet/navigation/ImportWalletNavigation.kt b/app/src/main/kotlin/com/gemwallet/android/features/import_wallet/navigation/ImportWalletNavigation.kt
index 9717b6b81..8f37f12ee 100644
--- a/app/src/main/kotlin/com/gemwallet/android/features/import_wallet/navigation/ImportWalletNavigation.kt
+++ b/app/src/main/kotlin/com/gemwallet/android/features/import_wallet/navigation/ImportWalletNavigation.kt
@@ -8,10 +8,10 @@ import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import androidx.navigation.navOptions
import androidx.navigation.navigation
+import com.gemwallet.android.ext.toChain
import com.gemwallet.android.features.import_wallet.views.ImportScreen
import com.gemwallet.android.features.import_wallet.views.SelectImportTypeScreen
import com.gemwallet.android.model.ImportType
-import com.wallet.core.primitives.Chain
import com.wallet.core.primitives.WalletType
internal const val walletTypeArg = "wallet_type"
@@ -56,7 +56,7 @@ fun NavGraphBuilder.importWalletScreen(
val walletTypeString = entry.arguments?.getString(walletTypeArg)
val chainString = entry.arguments?.getString(chainArg)
val walletType = WalletType.entries.firstOrNull { it.string == walletTypeString }
- val chain = Chain.entries.firstOrNull { it.string == chainString }
+ val chain = chainString?.toChain()
if (walletType == null || (walletType != WalletType.multicoin && chain == null)) {
onSelectType(null)
} else {
diff --git a/app/src/main/kotlin/com/gemwallet/android/services/SignerPreloaderProxy.kt b/app/src/main/kotlin/com/gemwallet/android/services/SignerPreloaderProxy.kt
deleted file mode 100644
index cc0ec6d92..000000000
--- a/app/src/main/kotlin/com/gemwallet/android/services/SignerPreloaderProxy.kt
+++ /dev/null
@@ -1,156 +0,0 @@
-package com.gemwallet.android.services
-
-import com.gemwallet.android.blockchain.clients.ActivationTransactionPreloader
-import com.gemwallet.android.blockchain.clients.ApprovalTransactionPreloader
-import com.gemwallet.android.blockchain.clients.GenericTransferPreloader
-import com.gemwallet.android.blockchain.clients.NativeTransferPreloader
-import com.gemwallet.android.blockchain.clients.NftTransactionPreloader
-import com.gemwallet.android.blockchain.clients.StakeTransactionPreloader
-import com.gemwallet.android.blockchain.clients.SwapTransactionPreloader
-import com.gemwallet.android.blockchain.clients.TokenTransferPreloader
-import com.gemwallet.android.blockchain.clients.getClient
-import com.gemwallet.android.cases.device.GetDeviceIdCase
-import com.gemwallet.android.data.repositoreis.session.SessionRepository
-import com.gemwallet.android.data.services.gemapi.GemApiClient
-import com.gemwallet.android.ext.getAccount
-import com.gemwallet.android.model.ConfirmParams
-import com.gemwallet.android.model.SignerParams
-import com.wallet.core.primitives.Chain
-import com.wallet.core.primitives.ScanAddressTarget
-import com.wallet.core.primitives.ScanTransaction
-import com.wallet.core.primitives.ScanTransactionPayload
-import com.wallet.core.primitives.Wallet
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.async
-import kotlinx.coroutines.withContext
-
-class SignerPreloaderProxy(
- private val gemApiClient: GemApiClient,
- private val sessionRepository: SessionRepository,
- private val getDeviceIdCase: GetDeviceIdCase,
- private val nativeTransferClients: List,
- private val tokenTransferClients: List,
- private val stakeTransactionClients: List,
- private val swapTransactionClients: List,
- private val approvalTransactionClients: List,
- private val activatePreloaderClients: List,
- private val genericPreloaderClients: List,
- private val nftPreloadClients: List,
-) : GenericTransferPreloader, NativeTransferPreloader, TokenTransferPreloader, StakeTransactionPreloader,
- SwapTransactionPreloader, ApprovalTransactionPreloader, ActivationTransactionPreloader, NftTransactionPreloader {
-
- suspend fun preload(params: ConfirmParams): SignerParams = withContext(Dispatchers.IO) {
-
- val isValidTransactionJob = async {
- isValidTransaction(
- getScanTransactionPayload(
- params,
- sessionRepository.getSession()?.wallet ?: throw IllegalStateException("Session isn't available"),
- getDeviceIdCase.getDeviceId()
- )
- )
- }
-
- val preloadJob = async {
- when (params) {
- is ConfirmParams.Stake -> preloadStake(params)
- is ConfirmParams.SwapParams -> preloadSwap(params)
- is ConfirmParams.TokenApprovalParams -> preloadApproval(params)
- is ConfirmParams.TransferParams.Native -> preloadNativeTransfer(params)
- is ConfirmParams.TransferParams.Token -> preloadTokenTransfer(params)
- is ConfirmParams.Activate -> preloadActivate(params)
- is ConfirmParams.TransferParams.Generic -> preloadGeneric(params)
- is ConfirmParams.NftParams -> preloadNft(params)
- }
- }
-
- val isValidTransaction = isValidTransactionJob.await()
- val preload = preloadJob.await()
- preload.copy(scanTransaction = isValidTransaction)
- }
-
- override fun supported(chain: Chain): Boolean {
- return (nativeTransferClients
- + tokenTransferClients
- + stakeTransactionClients
- + swapTransactionClients
- + approvalTransactionClients).getClient(chain) != null
- }
-
- override suspend fun preloadNativeTransfer(params: ConfirmParams.TransferParams.Native): SignerParams {
- return nativeTransferClients.getClient(params.from.chain)?.preloadNativeTransfer(params = params)
- ?: throw IllegalArgumentException("Chain isn't support")
- }
-
- override suspend fun preloadTokenTransfer(params: ConfirmParams.TransferParams.Token): SignerParams {
- return tokenTransferClients.getClient(params.from.chain)?.preloadTokenTransfer(params = params)
- ?: throw IllegalArgumentException("Chain isn't support")
- }
-
- override suspend fun preloadStake(params: ConfirmParams.Stake): SignerParams {
- return stakeTransactionClients.getClient(params.from.chain)?.preloadStake(params = params)
- ?: throw IllegalArgumentException("Chain isn't support")
- }
-
- override suspend fun preloadSwap(params: ConfirmParams.SwapParams): SignerParams {
- return swapTransactionClients.getClient(params.from.chain)?.preloadSwap(params = params)
- ?: throw IllegalArgumentException("Chain isn't support")
- }
-
- override suspend fun preloadApproval(params: ConfirmParams.TokenApprovalParams): SignerParams {
- return approvalTransactionClients.getClient(params.from.chain)?.preloadApproval(params = params)
- ?: throw IllegalArgumentException("Chain isn't support")
- }
-
- override suspend fun preloadActivate(params: ConfirmParams.Activate): SignerParams {
- return activatePreloaderClients.getClient(params.from.chain)?.preloadActivate(params = params)
- ?: throw IllegalArgumentException("Chain isn't support")
- }
-
- override suspend fun preloadGeneric(params: ConfirmParams.TransferParams.Generic): SignerParams {
- return genericPreloaderClients.getClient(params.from.chain)?.preloadGeneric(params = params)
- ?: throw IllegalArgumentException("Chain isn't support")
- }
-
- override suspend fun preloadNft(params: ConfirmParams.NftParams): SignerParams {
- return nftPreloadClients.getClient(params.from.chain)?.preloadNft(params = params)
- ?: throw IllegalArgumentException("Chain isn't support")
- }
-
- private suspend fun isValidTransaction(payload: ScanTransactionPayload): ScanTransaction? {
- return try {
- gemApiClient.getScanTransaction(payload).data
- } catch (_: Throwable) {
- null
- }
- }
-
- private fun getScanTransactionPayload(params: ConfirmParams, wallet: Wallet, deviceId: String): ScanTransactionPayload {
- val chain = params.assetId.chain
- val origin = ScanAddressTarget(
- chain = chain,
- address = params.from.address,
- )
- val target = when (params) {
- is ConfirmParams.SwapParams -> ScanAddressTarget(
- params.toAssetId.chain,
- address = wallet.getAccount(params.toAssetId.chain)?.address ?: throw IllegalArgumentException("Account isn't available")
- )
- is ConfirmParams.Stake -> ScanAddressTarget(chain, params.validatorId)
- is ConfirmParams.TokenApprovalParams -> ScanAddressTarget(chain, params.contract)
- is ConfirmParams.TransferParams.Native,
- is ConfirmParams.TransferParams.Generic,
- is ConfirmParams.TransferParams.Token -> ScanAddressTarget(chain, params.destination().address)
- is ConfirmParams.Activate -> ScanAddressTarget(chain, params.from.address)
- is ConfirmParams.NftParams -> ScanAddressTarget(chain, params.from.address)
- }
-
- return ScanTransactionPayload(
- deviceId = deviceId,
- walletIndex = wallet.index.toUInt(),
- origin = origin,
- target = target,
- type = params.getTxType(),
- )
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/TestFormatter.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/TestFormatter.kt
index 4facd9ddf..e735af02c 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/TestFormatter.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/TestFormatter.kt
@@ -9,8 +9,8 @@ import java.util.Locale
class TestFormatter {
@Test
fun testCompactFormat_Italy() {
- assertEquals("5,00 Mio €", Currency.EUR.compactFormatter(5_000_000.0, Locale.ITALY))
- assertEquals("7,89 Mrd €", Currency.EUR.compactFormatter(7_890_000_000.0, Locale.ITALY))
+ assertEquals("5,00 Mln €", Currency.EUR.compactFormatter(5_000_000.0, Locale.ITALY))
+ assertEquals("7,89 Mld €", Currency.EUR.compactFormatter(7_890_000_000.0, Locale.ITALY))
assertEquals("1,20 Bln €", Currency.EUR.compactFormatter(1_200_000_000_000.0, Locale.ITALY))
}
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/algorand/TestAlgorandSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/algorand/TestAlgorandSigner.kt
index 9dbb4ccf3..7e6c8cff4 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/algorand/TestAlgorandSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/algorand/TestAlgorandSigner.kt
@@ -3,7 +3,6 @@ package com.gemwallet.android.blockchain.clients.algorand
import com.gemwallet.android.blockchain.includeLibs
import com.gemwallet.android.blockchain.testPhrase
import com.gemwallet.android.ext.asset
-import com.gemwallet.android.math.toHexString
import com.gemwallet.android.model.ConfirmParams
import com.gemwallet.android.model.DestinationAddress
import com.gemwallet.android.model.Fee
@@ -39,28 +38,27 @@ class TestAlgorandSigner {
BigInteger.valueOf(10_000_000),
DestinationAddress("GOZOAE6SH6XGGDRBQLZEDRITKMF5OLVJNACVRQBUEGFLBBR5I64A7QN63E"),
),
- chainData = AlgorandSignPreloadClient.AlgorandChainData(
- sequence = 46932581,
+ chainData = AlgorandChainData(
+ sequence = 46932581UL,
block = "wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=",
chainId = "mainnet-v1.0",
- fee = Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Algorand),
- amount = BigInteger.TEN
- )
),
finalAmount = BigInteger.valueOf(10_000_000),
- FeePriority.Normal,
+ fee = Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Algorand),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
- assertEquals("0x82a3736967c44049c1faef9ca28e835bb980e84e2d6f6eaf866828abf8ce51f1820d04ea" +
+ assertEquals("82a3736967c44049c1faef9ca28e835bb980e84e2d6f6eaf866828abf8ce51f1820d04ea" +
"87623069603104aaadcdea598dd6e77f8dbe40c7f9638485cfeda1609b810e23ce1604a374786e8" +
"9a3616d74ce00989680a36665650aa26676ce02cc2265a367656eac6d61696e6e65742d76312e30" +
"a26768c420c061c4d8fc1dbdded2d7604be4568e3f6d041987ac37bde4b620b5ab39248adfa26c7" +
"6ce02cc264da3726376c42033b2e013d23fae630e2182f241c513530bd72ea9680558c034218ab0" +
"863d47b8a3736e64c42033b2e013d23fae630e2182f241c513530bd72ea9680558c034218ab0863" +
- "d47b8a474797065a3706179", sign.first().toHexString())
+ "d47b8a474797065a3706179", String(sign.first()))
}
}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosBalance.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosBalance.kt
deleted file mode 100644
index 13c47e1b4..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosBalance.kt
+++ /dev/null
@@ -1,161 +0,0 @@
-package com.gemwallet.android.blockchain.clients.aptos
-
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.ext.toIdentifier
-import com.wallet.core.primitives.Asset
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.AssetType
-import com.wallet.core.primitives.Chain
-import junit.framework.TestCase.assertEquals
-import junit.framework.TestCase.assertNotNull
-import junit.framework.TestCase.assertNull
-import junit.framework.TestCase.assertTrue
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-class TestAptosBalance {
-
- companion object {
- init {
- includeLibs()
- }
- }
-
- @Test
- fun testAptosBalance() {
- val balancesService = TestAptosBalancesService(nativeBalance = "100000000")
- val client = AptosBalanceClient(
- chain = Chain.Aptos,
- balanceService = balancesService
- )
-
- val result = runBlocking {
- client.getNativeBalance(Chain.Aptos, "0x80c3cca35602e4568a7ac88d4d91110f8efa6c45c659439c2b4ed04033059c6f")
- }
- assertNotNull(result)
- assertEquals("0x80c3cca35602e4568a7ac88d4d91110f8efa6c45c659439c2b4ed04033059c6f", balancesService.nativeRequest)
- assertEquals("100000000", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.pending)
- assertEquals(1.0, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(0.0, result.balanceAmount.staked)
- assertEquals(0.0, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(0.0, result.balanceAmount.pending)
- assertEquals(1.0, result.totalAmount)
- assertEquals(AssetId(Chain.Aptos).toIdentifier(), result.asset.id.toIdentifier())
- }
-
- @Test
- fun testAptosBalanceFail() {
- val balanceService = TestAptosBalancesService()
- val client = AptosBalanceClient(
- chain = Chain.Aptos,
- balanceService = balanceService
- )
-
- runBlocking {
- val result = client.getNativeBalance(Chain.Aptos, "0x80c3cca35602e4568a7ac88d4d91110f8efa6c45c659439c2b4ed04033059c6f")
- assertNull(result)
- }
- }
-
- @Test
- fun testAptosBalanceBadValue() {
- val balanceService = TestAptosBalancesService(nativeBalance = "0abcde")
- val client = AptosBalanceClient(
- chain = Chain.Aptos,
- balanceService = balanceService
- )
-
- runBlocking {
- val result = client.getNativeBalance(Chain.Aptos, "0x80c3cca35602e4568a7ac88d4d91110f8efa6c45c659439c2b4ed04033059c6f")
- assertNull(result)
- }
- }
-
- @Test
- fun testAptosBalanceEmpty() {
- val balanceService = TestAptosBalancesService(nativeBalance = "0")
- val client = AptosBalanceClient(
- chain = Chain.Aptos,
- balanceService = balanceService
- )
-
- val result = runBlocking {
- client.getNativeBalance(
- Chain.Aptos,
- "0x80c3cca35602e4568a7ac88d4d91110f8efa6c45c659439c2b4ed04033059c6f"
- )
- }
- assertNotNull(result)
- assertEquals("0", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.pending)
- assertEquals(0.0, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(0.0, result.balanceAmount.staked)
- assertEquals(0.0, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(0.0, result.balanceAmount.pending)
- assertEquals(0.0, result.totalAmount)
- assertEquals(AssetId(Chain.Aptos).toIdentifier(), result.asset.id.toIdentifier())
- }
-
- @Test
- fun testAptos_tokens_balance() {
- val balanceService = TestAptosBalancesService(
- nativeBalance = "0",
- )
- val assets = listOf(
- Asset(
- AssetId(Chain.Aptos, "0xe4ccb6d39136469f376242c31b34d10515c8eaaa38092f804db8e08a8f53c5b2::assets_v1::EchoCoin002"),
- decimals = 6,
- name = "Gui Inu",
- symbol = "GUI",
- type = AssetType.TOKEN
- ),
- Asset(
- AssetId(Chain.Aptos, "0x159df6b7689437016108a019fd5bef736bac692b6d4a1f10c941f6fbb9a74ca6::oft::CakeOFT"),
- decimals = 8,
- name = "PancakeSwap Token",
- symbol = "CAKE",
- type = AssetType.TOKEN
- ),
- )
- val client = AptosBalanceClient(
- chain = Chain.Aptos,
- balanceService = balanceService
- )
-
- val result = runBlocking {
- client.getTokenBalances(
- Chain.Aptos,
- "0x80c3cca35602e4568a7ac88d4d91110f8efa6c45c659439c2b4ed04033059c6f",
- assets,
- )
- }
- assertNotNull(result)
- assertTrue(result.isNotEmpty())
- assertEquals(assets[0].id.toIdentifier(), result[0].asset.id.toIdentifier())
- assertEquals("30000000", result[0].balance.available)
- assertEquals(30.0, result[0].balanceAmount.available)
- assertEquals(assets[1].id.toIdentifier(), result[1].asset.id.toIdentifier())
- assertEquals("50000000", result[1].balance.available)
- assertEquals(0.5, result[1].balanceAmount.available)
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosBalancesService.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosBalancesService.kt
deleted file mode 100644
index cf5c78cb2..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosBalancesService.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.gemwallet.android.blockchain.clients.aptos
-
-import com.gemwallet.android.blockchain.clients.aptos.services.AptosBalancesService
-import com.wallet.core.blockchain.aptos.AptosResource
-import com.wallet.core.blockchain.aptos.AptosResourceBalanceOptional
-import com.wallet.core.blockchain.aptos.AptosResourceCoin
-import okhttp3.ResponseBody
-import okhttp3.ResponseBody.Companion.toResponseBody
-
-class TestAptosBalancesService(
- val nativeBalance: String? = null,
-) : AptosBalancesService {
-
- var nativeRequest: String? = null
- var tokenRequest: String? = null
-
- override suspend fun balance(address: String, assetType: String): ResponseBody {
- nativeRequest = address
- nativeBalance ?: throw Exception()
- return nativeBalance.toResponseBody()
- }
- override suspend fun resources(address: String): List> {
- tokenRequest = address
- return listOf(
- AptosResource(
- type = "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>",
- AptosResourceBalanceOptional(
- AptosResourceCoin(
- "10000000"
- )
- )
- ),
- AptosResource(
- type = "0x1::coin::CoinStore<0xe4ccb6d39136469f376242c31b34d10515c8eaaa38092f804db8e08a8f53c5b2::assets_v1::EchoCoin002>",
- AptosResourceBalanceOptional(
- AptosResourceCoin(
- "30000000"
- )
- )
- ),
- AptosResource(
- type = "0x1::coin::CoinStore<0x159df6b7689437016108a019fd5bef736bac692b6d4a1f10c941f6fbb9a74ca6::oft::CakeOFT>",
- AptosResourceBalanceOptional(
- AptosResourceCoin(
- "50000000"
- )
- )
- ),
- )
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosSigner.kt
index 14e9dce40..9ebc45f8a 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/aptos/TestAptosSigner.kt
@@ -44,17 +44,16 @@ class TestAptosSigner {
BigInteger.valueOf(10_000_000_000),
DestinationAddress("0x82111f2975a0f6080d178236369b7479f6aed1203ef4a23f8205e4b91716b783"),
),
- chainData = AptosSignerPreloader.AptosChainData(
- 8L,
- listOf(GasFee(
- AssetId(Chain.Aptos),
- priority = FeePriority.Normal,
- maxGasPrice = BigInteger.valueOf(150L),
- limit = BigInteger.valueOf(18L)
- ))
+ chainData = AptosChainData(
+ 8UL,
),
finalAmount = BigInteger.valueOf(10_000_000_000),
- FeePriority.Normal,
+ GasFee(
+ AssetId(Chain.Aptos),
+ priority = FeePriority.Normal,
+ maxGasPrice = BigInteger.valueOf(150L),
+ limit = BigInteger.valueOf(18L)
+ ),
privateKey.data(),
)
}
@@ -91,18 +90,17 @@ class TestAptosSigner {
BigInteger.valueOf(10_000_000_000),
DestinationAddress("0x82111f2975a0f6080d178236369b7479f6aed1203ef4a23f8205e4b91716b783"),
),
- chainData = AptosSignerPreloader.AptosChainData(
- 8L,
- listOf(GasFee(
- AssetId(Chain.Aptos),
- priority = FeePriority.Normal,
- maxGasPrice = BigInteger.valueOf(150L),
- limit = BigInteger.valueOf(18L)
- ))
+ chainData = AptosChainData(
+ 8UL,
+ ),
+ fee = GasFee(
+ AssetId(Chain.Aptos),
+ priority = FeePriority.Normal,
+ maxGasPrice = BigInteger.valueOf(150L),
+ limit = BigInteger.valueOf(18L)
),
finalAmount = BigInteger.valueOf(10_000_000_000),
- FeePriority.Normal,
- privateKey.data(),
+ privateKey = privateKey.data(),
)
}
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinBalance.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinBalance.kt
deleted file mode 100644
index f6437ae33..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinBalance.kt
+++ /dev/null
@@ -1,146 +0,0 @@
-package com.gemwallet.android.blockchain.clients.bitcoin
-
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.gemwallet.android.blockchain.clients.bitcoin.services.BitcoinBalancesService
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.ext.toIdentifier
-import com.wallet.core.blockchain.bitcoin.BitcoinAccount
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.Chain
-import junit.framework.TestCase.assertEquals
-import junit.framework.TestCase.assertNotNull
-import junit.framework.TestCase.assertNull
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-class TestBitcoinBalance {
-
- companion object {
- init {
- includeLibs()
- }
- }
-
- @Test
- fun testBitcoinBalance() {
- val client = BitcoinBalanceClient(
- chain = Chain.Bitcoin,
- balanceService = object : BitcoinBalancesService {
- override suspend fun balance(address: String): Result {
- assertEquals("bc1qqypy0q4uwk8h845j8qc5r76zyk2fwdtvqy4s4x", address)
- return Result.success(BitcoinAccount(balance = "100000000"))
- }
- }
- )
-
- val result = runBlocking {
- client.getNativeBalance(Chain.Bitcoin, "bc1qqypy0q4uwk8h845j8qc5r76zyk2fwdtvqy4s4x")
- }
- assertNotNull(result)
- assertEquals("100000000", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.pending)
- assertEquals(1.0, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(0.0, result.balanceAmount.staked)
- assertEquals(0.0, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(0.0, result.balanceAmount.pending)
- assertEquals(1.0, result.totalAmount)
- assertEquals(AssetId(Chain.Bitcoin).toIdentifier(), result.asset.id.toIdentifier())
- }
-
- @Test
- fun testBitcoincacheBalance() {
- var requestAddress: String? = null
- val client = BitcoinBalanceClient(
- chain = Chain.Bitcoin,
- balanceService = object : BitcoinBalancesService {
- override suspend fun balance(address: String): Result {
- requestAddress = address
- return Result.success(BitcoinAccount(balance = "100000000"))
- }
- }
- )
-
- runBlocking {
- client.getNativeBalance(Chain.BitcoinCash, "qq29xrkkd68alnrca375qlfyhwdqdkevsvmgkq9cmw")
- }
- assertEquals("bitcoincash:qq29xrkkd68alnrca375qlfyhwdqdkevsvmgkq9cmw", requestAddress)
- }
-
- @Test
- fun testBitcoinBalanceFail() {
- val client = BitcoinBalanceClient(
- chain = Chain.Bitcoin,
- balanceService = object : BitcoinBalancesService {
- override suspend fun balance(address: String): Result {
- return Result.failure(Exception())
- }
- }
- )
-
- runBlocking {
- val result = client.getNativeBalance(Chain.Bitcoin, "bc1qqypy0q4uwk8h845j8qc5r76zyk2fwdtvqy4s4x")
- assertNull(result)
- }
- }
-
- @Test
- fun testBitcoinBalanceBadValue() {
- val client = BitcoinBalanceClient(
- chain = Chain.Bitcoin,
- balanceService = object : BitcoinBalancesService {
- override suspend fun balance(address: String): Result {
- return Result.success(BitcoinAccount("0abcdesdf"))
- }
- }
- )
-
- runBlocking {
- val result = client.getNativeBalance(Chain.Bitcoin, "bc1qqypy0q4uwk8h845j8qc5r76zyk2fwdtvqy4s4x")
- assertNull(result)
- }
- }
-
- @Test
- fun testBitcoinBalanceEmpty() {
- val client = BitcoinBalanceClient(
- chain = Chain.Bitcoin,
- balanceService = object : BitcoinBalancesService {
- override suspend fun balance(address: String): Result {
- return Result.success(BitcoinAccount("0"))
- }
-
- }
- )
-
- runBlocking {
- val result = client.getNativeBalance(Chain.Bitcoin, "bc1qqypy0q4uwk8h845j8qc5r76zyk2fwdtvqy4s4x")
- assertNotNull(result)
- assertEquals("0", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.pending)
- assertEquals(0.0, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(0.0, result.balanceAmount.staked)
- assertEquals(0.0, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(0.0, result.balanceAmount.pending)
- assertEquals(0.0, result.totalAmount)
- assertEquals(AssetId(Chain.Bitcoin).toIdentifier(), result.asset.id.toIdentifier())
- }
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinSIgnerPreloader.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinSIgnerPreloader.kt
deleted file mode 100644
index 27f7ed693..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinSIgnerPreloader.kt
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.gemwallet.android.blockchain.clients.bitcoin
-
-import com.gemwallet.android.blockchain.clients.bitcoin.services.BitcoinFeeService
-import com.gemwallet.android.blockchain.clients.bitcoin.services.BitcoinUTXOService
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.ext.asset
-import com.gemwallet.android.ext.toIdentifier
-import com.gemwallet.android.model.ConfirmParams
-import com.gemwallet.android.model.DestinationAddress
-import com.wallet.core.blockchain.bitcoin.BitcoinFeeResult
-import com.wallet.core.blockchain.bitcoin.BitcoinUTXO
-import com.wallet.core.primitives.Account
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.Chain
-import com.wallet.core.primitives.FeePriority
-import junit.framework.TestCase.assertEquals
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import java.math.BigInteger
-
-class TestBitcoinSignerPreloader {
-
- companion object {
- init {
- includeLibs()
- }
- }
-
- @Test
- fun testBitcoinMinimumByteFee() {
- assertEquals(BitcoinFeeCalculator.getMinimumByteFee(Chain.Bitcoin), BigInteger.ONE)
- assertEquals(BitcoinFeeCalculator.getMinimumByteFee(Chain.Litecoin), BigInteger.valueOf(5))
- assertEquals(BitcoinFeeCalculator.getMinimumByteFee(Chain.Doge), BigInteger.valueOf(1000))
- }
-
- @Test
- fun testBitcoinPreloader() {
- var requestAddress = ""
- val preloader = BitcoinSignerPreloader(
- Chain.Bitcoin,
- object : BitcoinUTXOService {
- override suspend fun getUTXO(address: String): Result> {
- requestAddress = address
-
- return Result.success(
- listOf(
- BitcoinUTXO(
- txid = "9f47e5d5ae3dac0662766f95d0cdda9c242c08d6baac4ce5d82464cf948abd53",
- vout = 1,
- value = "86055170",
- )
- )
- )
- }
-
- },
- object : BitcoinFeeService {
- override suspend fun estimateFee(priority: String): Result {
- val value = when (priority) {
- "8" -> "0.17457567"
- "4" -> "0.17457567"
- "2" -> "0.60356369"
- else -> return Result.failure(Exception("Incorrect priority"))
- }
- return Result.success(BitcoinFeeResult(value))
- }
- }
- )
- val result = runBlocking {
- preloader.preloadNativeTransfer(
- params = ConfirmParams.TransferParams.Native(
- asset = Chain.Bitcoin.asset(),
- from = Account(
- Chain.Doge,
- "DDyZeg24eU3csLa7LMWrZEoqnHXccz6c94",
- "",
- "dgub8rNuTi8ofZu1jVDKpBxW9VFo62kjjx3b6CcameEZnrNNHJ3sKCnWBxQSv6qAP6jrwZEpfT1ZdKsrcBFKGTMV8zgBtjZmvQt29VPnLzbHjjD"
- ),
- amount = BigInteger.valueOf(10_000_000_000),
- destination = DestinationAddress("D8UBj4EfNfNWNCdnCSgpY48yZDqPdTZXWW"),
- isMaxAmount = false
- )
- )
- }
- assertEquals("DDyZeg24eU3csLa7LMWrZEoqnHXccz6c94", requestAddress)
- assertEquals(BigInteger.valueOf(10_000_000_000), result.input.amount)
- assertEquals("DDyZeg24eU3csLa7LMWrZEoqnHXccz6c94", result.input.from.address)
- assertEquals(AssetId(Chain.Bitcoin).toIdentifier(), result.input.assetId.toIdentifier())
- assertEquals(false, result.input.isMax())
- assertEquals("D8UBj4EfNfNWNCdnCSgpY48yZDqPdTZXWW", result.input.destination()?.address)
- assertEquals(null, result.input.memo())
- assertEquals(BigInteger.valueOf(3351936), result.chainData.fee().amount)
- assertEquals(BigInteger.valueOf(17458), result.chainData.gasFee().maxGasPrice)
- assertEquals(BigInteger.valueOf(192), result.chainData.gasFee().limit)
- assertEquals(AssetId(Chain.Doge).toIdentifier(), result.chainData.fee().feeAssetId.toIdentifier())
- assertEquals(FeePriority.Normal, result.chainData.fee().priority)
- assertEquals("9f47e5d5ae3dac0662766f95d0cdda9c242c08d6baac4ce5d82464cf948abd53", (result.chainData as BitcoinSignerPreloader.BitcoinChainData).utxo[0].txid)
- assertEquals(1, (result.chainData as BitcoinSignerPreloader.BitcoinChainData).utxo[0].vout)
- assertEquals("86055170", (result.chainData as BitcoinSignerPreloader.BitcoinChainData).utxo[0].value)
- assertEquals(3, result.chainData.allFee().size)
- assertEquals(BigInteger.valueOf(192), result.chainData.gasFee(FeePriority.Fast).limit)
- assertEquals(BigInteger.valueOf(60357), result.chainData.gasFee(FeePriority.Fast).maxGasPrice)
- assertEquals(BigInteger.valueOf(11588544), result.chainData.gasFee(FeePriority.Fast).amount)
- assertEquals(BigInteger.valueOf(192), result.chainData.gasFee(FeePriority.Slow).limit)
- assertEquals(BigInteger.valueOf(17458), result.chainData.gasFee(FeePriority.Slow).maxGasPrice)
- assertEquals(BigInteger.valueOf(3351936), result.chainData.gasFee(FeePriority.Slow).amount)
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinSigner.kt
index 0a55fb97b..1ace606fa 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/bitcoin/TestBitcoinSigner.kt
@@ -4,15 +4,14 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.gemwallet.android.blockchain.includeLibs
import com.gemwallet.android.blockchain.testPhrase
import com.gemwallet.android.ext.asset
-import com.gemwallet.android.math.toHexString
import com.gemwallet.android.model.ConfirmParams
import com.gemwallet.android.model.DestinationAddress
import com.gemwallet.android.model.GasFee
-import com.wallet.core.blockchain.bitcoin.BitcoinUTXO
import com.wallet.core.primitives.Account
import com.wallet.core.primitives.AssetId
import com.wallet.core.primitives.Chain
import com.wallet.core.primitives.FeePriority
+import com.wallet.core.primitives.UTXO
import junit.framework.TestCase.assertEquals
import kotlinx.coroutines.runBlocking
import org.junit.Test
@@ -25,7 +24,7 @@ import java.math.BigInteger
class TestBitcoinSigner {
companion object {
- const val SIGN_RESULT = "0x010000000153bd8a94cf6424d8e54cacbad6082c249cdacdd0956f766206a" +
+ const val SIGN_RESULT = "010000000153bd8a94cf6424d8e54cacbad6082c249cdacdd0956f766206a" +
"c3daed5e5479f010000006b483045022100ead2b7637532b167e66ddf76eafd032ada898c8719a" +
"680de8183b71fb3086a3e022055a073be9148cb8b9dc71de04755dbf11f140fee167ed0d4b44d6" +
"a54a829e75e012102fd6585adc0e86019abf00e83552d054cb5f4359ad4db8ca338099381f43e2" +
@@ -49,29 +48,27 @@ class TestBitcoinSigner {
BigInteger.valueOf(10_000_000_000),
DestinationAddress("D8UBj4EfNfNWNCdnCSgpY48yZDqPdTZXWW"),
),
- chainData = BitcoinSignerPreloader.BitcoinChainData(
+ chainData = BitcoinChainData(
listOf(
- BitcoinUTXO(
- txid = "9f47e5d5ae3dac0662766f95d0cdda9c242c08d6baac4ce5d82464cf948abd53",
+ UTXO(
+ transaction_id = "9f47e5d5ae3dac0662766f95d0cdda9c242c08d6baac4ce5d82464cf948abd53",
vout = 1,
value = "86055170",
+ address = ""
)
),
- listOf(
- GasFee(
- AssetId(Chain.Doge),
- priority = FeePriority.Normal,
- maxGasPrice = BigInteger.valueOf(150L),
- limit = BigInteger.valueOf(18L)
- )
- )
),
finalAmount = BigInteger.valueOf(10_000_000_000),
- FeePriority.Normal,
+ fee = GasFee(
+ AssetId(Chain.Doge),
+ priority = FeePriority.Normal,
+ maxGasPrice = BigInteger.valueOf(150L),
+ limit = BigInteger.valueOf(18L)
+ ),
privateKey.data()
)
}
- assertEquals(SIGN_RESULT, sign.first().toHexString())
+ assertEquals(SIGN_RESULT, String(sign.first()))
}
}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cardano/TestCardanoSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cardano/TestCardanoSigner.kt
index 750f21742..8119071e8 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cardano/TestCardanoSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cardano/TestCardanoSigner.kt
@@ -1,10 +1,8 @@
package com.gemwallet.android.blockchain.clients.cardano
-import com.gemwallet.android.blockchain.clients.cardano.CardanoSignerPreloaderClient.CardanoChainData
import com.gemwallet.android.blockchain.includeLibs
import com.gemwallet.android.blockchain.testPhrase
import com.gemwallet.android.ext.asset
-import com.gemwallet.android.math.toHexString
import com.gemwallet.android.model.ConfirmParams
import com.gemwallet.android.model.DestinationAddress
import com.gemwallet.android.model.Fee
@@ -41,11 +39,6 @@ class TestCardanoSigner {
DestinationAddress("addr1q9d2dxen8ywvs9yzxxn2w4mvffn797fquauvugt2ug7mfsuqj3lzdq9h0rsketzszrnfm930658swmpe7kpq53c2tmwql4rvtq"),
),
chainData = CardanoChainData(
- fee = Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Cardano),
- amount = BigInteger.TEN
- ),
utxos = listOf(
UTXO(
address = "addr1q9d2dxen8ywvs9yzxxn2w4mvffn797fquauvugt2ug7mfsuqj3lzdq9h0rsketzszrnfm930658swmpe7kpq53c2tmwql4rvtq",
@@ -56,18 +49,22 @@ class TestCardanoSigner {
)
),
finalAmount = BigInteger.valueOf(10_000),
- FeePriority.Normal,
+ fee = Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Cardano),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
- assertEquals("0x83a40081825820412c5a964cf4515210bf4b82f45df6521c38e1e5381f27638fc509bef66" +
+ assertEquals("83a40081825820412c5a964cf4515210bf4b82f45df6521c38e1e5381f27638fc509bef66" +
"79378010182825839015aa69b33391cc8148231a6a7576c4a67e2f920e778ce216ae23db4c380947" +
"e2680b778e16cac5010e69d962fd50f076c39f5820a470a5edc192710825839015aa69b33391cc81" +
"48231a6a7576c4a67e2f920e778ce216ae23db4c380947e2680b778e16cac5010e69d962fd50f076" +
"c39f5820a470a5edc1a0076859c021a0002924b031a0b532b80a10081825820878150b7cb71f9406" +
"e36dcdd250e22dc943ec4525233581536497acb4f13e670584004bf4935e4dcc7f54947c4eb0b9cd" +
"d24880b168138af31b394ee0e7fe935900383822f432a1c2b533ea54f8ef12f1758b30a045f3918e" +
- "f25a51dad762d071b0af6", sign.first().toHexString())
+ "f25a51dad762d071b0af6", String(sign.first()))
}
}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cosmos/TestCosmosBalances.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cosmos/TestCosmosBalances.kt
deleted file mode 100644
index 8b93e4f3d..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cosmos/TestCosmosBalances.kt
+++ /dev/null
@@ -1,328 +0,0 @@
-package com.gemwallet.android.blockchain.clients.cosmos
-
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.gemwallet.android.blockchain.clients.cosmos.services.CosmosBalancesService
-import com.gemwallet.android.blockchain.clients.cosmos.services.CosmosStakeService
-import com.gemwallet.android.ext.toIdentifier
-import com.wallet.core.blockchain.cosmos.CosmosBalance
-import com.wallet.core.blockchain.cosmos.CosmosBalances
-import com.wallet.core.blockchain.cosmos.CosmosDelegation
-import com.wallet.core.blockchain.cosmos.CosmosDelegationData
-import com.wallet.core.blockchain.cosmos.CosmosDelegations
-import com.wallet.core.blockchain.cosmos.CosmosReward
-import com.wallet.core.blockchain.cosmos.CosmosRewards
-import com.wallet.core.blockchain.cosmos.CosmosUnboudingDelegationEntry
-import com.wallet.core.blockchain.cosmos.CosmosUnboundingDelegation
-import com.wallet.core.blockchain.cosmos.CosmosUnboundingDelegations
-import com.wallet.core.blockchain.cosmos.CosmosValidators
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.Chain
-import junit.framework.TestCase.assertEquals
-import junit.framework.TestCase.assertNotNull
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-class TestCosmosBalances {
-
- private class TestCosmosStakeService(
- val delegations: List = emptyList(),
- val unboundings: List = emptyList(),
- val rewards: List = emptyList(),
- ) : CosmosStakeService {
-
- var delegationsAddressRequest: String = ""
- var unboundingAddressRequest: String = ""
- var rewardsAddressRequest: String = ""
-
- override suspend fun validators(): Result {
- return Result.success(CosmosValidators(emptyList()))
- }
-
- override suspend fun delegations(address: String): Result {
- delegationsAddressRequest = address
- return Result.success(CosmosDelegations(delegations))
- }
-
- override suspend fun undelegations(address: String): Result {
- unboundingAddressRequest = address
- return Result.success(CosmosUnboundingDelegations(unboundings))
- }
-
- override suspend fun rewards(address: String): Result {
- rewardsAddressRequest = address
- return Result.success(CosmosRewards(rewards))
- }
-
- }
-
- @Test
- fun testCosmosBalance() {
- var ownerRequest: String = ""
- val balanceService = object : CosmosBalancesService {
- override suspend fun getBalance(owner: String): Result {
- ownerRequest = owner
- return Result.success(
- CosmosBalances(
- listOf(
- CosmosBalance(denom = "uosmo", amount = "5272821")
- )
- )
- )
- }
- }
-
- val result = runBlocking {
- CosmosBalanceClient(
- Chain.Osmosis,
- balancesService = balanceService,
- stakeService = TestCosmosStakeService(),
- ).getNativeBalance(Chain.Osmosis, "osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v")
- }
- assertEquals("osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v", ownerRequest)
- assertNotNull(result)
- assertEquals("5272821", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.pending)
- assertEquals(5.272821, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(0.0, result.balanceAmount.staked)
- assertEquals(0.0, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(0.0, result.balanceAmount.pending)
- assertEquals(5.272821, result.totalAmount)
- assertEquals(AssetId(Chain.Osmosis).toIdentifier(), result.asset.id.toIdentifier())
- }
-
- @Test
- fun testCosmosBalanceStakeOnly() {
- var ownerRequest: String = ""
- val balanceService = object : CosmosBalancesService {
- override suspend fun getBalance(owner: String): Result {
- ownerRequest = owner
- return Result.success(CosmosBalances(listOf()))
- }
- }
-
- val stakeService = TestCosmosStakeService(
- delegations = listOf(
- CosmosDelegation(
- CosmosDelegationData("osmovaloper1pxphtfhqnx9ny27d53z4052e3r76e7qq495ehm"),
- CosmosBalance("uosmo", "1000000")
- ),
- CosmosDelegation(
- CosmosDelegationData("osmovaloper1z0sh4s80u99l6y9d3vfy582p8jejeeu6tcucs2"),
- CosmosBalance("uosmo", "1000000")
- ),
- CosmosDelegation(
- CosmosDelegationData("osmovaloper1wgmdcxzp49vjgrqusgcagq6qefk4mtjv5c0k7q"),
- CosmosBalance("uosmo", "721000000")
- )
- )
- )
-
- val result = runBlocking {
- CosmosBalanceClient(
- Chain.Osmosis,
- balancesService = balanceService,
- stakeService = stakeService,
- ).getNativeBalance(Chain.Osmosis, "osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v")
- }
- assertEquals("osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v", ownerRequest)
- assertNotNull(result)
- assertEquals("0", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("723000000", result.balance.staked)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.pending)
- assertEquals(0.0, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(723.0, result.balanceAmount.staked)
- assertEquals(0.0, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(0.0, result.balanceAmount.pending)
- assertEquals(723.0, result.totalAmount)
- assertEquals(AssetId(Chain.Osmosis).toIdentifier(), result.asset.id.toIdentifier())
- }
-
- @Test
- fun testCosmosBalanceUnboundingOnly() {
- var ownerRequest: String = ""
- val balanceService = object : CosmosBalancesService {
- override suspend fun getBalance(owner: String): Result {
- ownerRequest = owner
- return Result.success(CosmosBalances(listOf()))
- }
- }
- val stakeService = TestCosmosStakeService(
- unboundings = listOf(
- CosmosUnboundingDelegation(
- "osmovaloper1pxphtfhqnx9ny27d53z4052e3r76e7qq495ehm",
- entries = listOf(
- CosmosUnboudingDelegationEntry(
- creation_height = "25053096",
- completion_time = "2024-12-18T02:11:27.650773866Z",
- balance = "2000000",
- )
- )
- ),
- )
- )
-
- val result = runBlocking {
- CosmosBalanceClient(
- Chain.Osmosis,
- balancesService = balanceService,
- stakeService = stakeService,
- ).getNativeBalance(Chain.Osmosis, "osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v")
- }
- assertEquals("osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v", ownerRequest)
- assertNotNull(result)
- assertEquals("0", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("2000000", result.balance.pending)
- assertEquals(0.0, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(0.0, result.balanceAmount.staked)
- assertEquals(0.0, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(2.0, result.balanceAmount.pending)
- assertEquals(2.0, result.totalAmount)
- assertEquals(AssetId(Chain.Osmosis).toIdentifier(), result.asset.id.toIdentifier())
- }
-
- @Test
- fun testCosmosBalanceRewardsOnly() {
- var ownerRequest: String = ""
- val balanceService = object : CosmosBalancesService {
- override suspend fun getBalance(owner: String): Result {
- ownerRequest = owner
- return Result.success(CosmosBalances(listOf()))
- }
- }
- val stakeService = TestCosmosStakeService(
- rewards = listOf(
- CosmosReward("osmovaloper1pxphtfhqnx9ny27d53z4052e3r76e7qq495ehm", listOf(CosmosBalance(denom = "uosmo", amount = "808.015913259210000000"))),
- CosmosReward("osmovaloper1z0sh4s80u99l6y9d3vfy582p8jejeeu6tcucs2", listOf(CosmosBalance(denom = "uosmo", amount = "808.009961413523000000"))),
- CosmosReward("osmovaloper1wgmdcxzp49vjgrqusgcagq6qefk4mtjv5c0k7q", listOf(CosmosBalance(denom = "uosmo", amount = "582579.692713670953000000"))),
- )
- )
-
- val result = runBlocking {
- CosmosBalanceClient(
- Chain.Osmosis,
- balancesService = balanceService,
- stakeService = stakeService,
- ).getNativeBalance(Chain.Osmosis, "osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v")
- }
- assertEquals("osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v", ownerRequest)
- assertNotNull(result)
- assertEquals("0", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.staked)
- assertEquals("584195", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.pending)
- assertEquals(0.0, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(0.0, result.balanceAmount.staked)
- assertEquals(0.584195, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(0.0, result.balanceAmount.pending)
- assertEquals(0.584195, result.totalAmount)
- assertEquals(AssetId(Chain.Osmosis).toIdentifier(), result.asset.id.toIdentifier())
- }
-
- @Test
- fun testCosmosBalanceFull() {
- var ownerRequest: String = ""
- val balanceService = object : CosmosBalancesService {
- override suspend fun getBalance(owner: String): Result {
- ownerRequest = owner
- return Result.success(
- CosmosBalances(
- listOf(
- CosmosBalance(denom = "uosmo", amount = "5272821")
- )
- )
- )
- }
- }
-
- val stakeService = TestCosmosStakeService(
- delegations = listOf(
- CosmosDelegation(
- CosmosDelegationData("osmovaloper1pxphtfhqnx9ny27d53z4052e3r76e7qq495ehm"),
- CosmosBalance("uosmo", "1000000")
- ),
- CosmosDelegation(
- CosmosDelegationData("osmovaloper1z0sh4s80u99l6y9d3vfy582p8jejeeu6tcucs2"),
- CosmosBalance("uosmo", "1000000")
- ),
- CosmosDelegation(
- CosmosDelegationData("osmovaloper1wgmdcxzp49vjgrqusgcagq6qefk4mtjv5c0k7q"),
- CosmosBalance("uosmo", "721000000")
- )
- ),
- unboundings = listOf(
- CosmosUnboundingDelegation(
- "osmovaloper1pxphtfhqnx9ny27d53z4052e3r76e7qq495ehm",
- entries = listOf(
- CosmosUnboudingDelegationEntry(
- creation_height = "25053096",
- completion_time = "2024-12-18T02:11:27.650773866Z",
- balance = "2000000",
- )
- )
- ),
- ),
- rewards = listOf(
- CosmosReward("osmovaloper1pxphtfhqnx9ny27d53z4052e3r76e7qq495ehm", listOf(CosmosBalance(denom = "uosmo", amount = "808.015913259210000000"))),
- CosmosReward("osmovaloper1z0sh4s80u99l6y9d3vfy582p8jejeeu6tcucs2", listOf(CosmosBalance(denom = "uosmo", amount = "808.009961413523000000"))),
- CosmosReward("osmovaloper1wgmdcxzp49vjgrqusgcagq6qefk4mtjv5c0k7q", listOf(CosmosBalance(denom = "uosmo", amount = "582579.692713670953000000"))),
- )
- )
-
- val result = runBlocking {
- CosmosBalanceClient(
- Chain.Osmosis,
- balancesService = balanceService,
- stakeService = stakeService,
- ).getNativeBalance(Chain.Osmosis, "osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v")
- }
- assertEquals("osmo1ac4ns740p4v78n4wr7j3t3s79jjjre6udx7n2v", ownerRequest)
- assertNotNull(result)
- assertEquals("5272821", result!!.balance.available)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("723000000", result.balance.staked)
- assertEquals("584195", result.balance.rewards)
- assertEquals("0", result.balance.reserved)
- assertEquals("2000000", result.balance.pending)
- assertEquals(5.272821, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(723.0, result.balanceAmount.staked)
- assertEquals(0.584195, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(2.0, result.balanceAmount.pending)
- assertEquals(730.857016, result.totalAmount)
- assertEquals(AssetId(Chain.Osmosis).toIdentifier(), result.asset.id.toIdentifier())
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cosmos/TestCosmosSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cosmos/TestCosmosSigner.kt
index 1105ba766..14b8da275 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cosmos/TestCosmosSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/cosmos/TestCosmosSigner.kt
@@ -39,21 +39,26 @@ class TestCosmosSigner {
fun testSignNativeTransfer() {
val transfer = ConfirmParams.Builder(Chain.Osmosis.asset(), osmoAccount, BigInteger.TEN)
.transfer(DestinationAddress("osmo1rcjvzz8wzktqfz8qjf0l9q45kzxvd0z0n7l5cf")) as ConfirmParams.TransferParams.Native
- val chainData = CosmosSignerPreloader.CosmosChainData(
+ val chainData = CosmosChainData(
chainId = "osmosis-1",
- accountNumber = 2913388L,
- sequence = 10L,
- fee = GasFee(
- feeAssetId = AssetId(Chain.Osmosis),
- maxGasPrice = BigInteger.valueOf(10000L),
- limit = BigInteger.valueOf(200000L),
- amount = BigInteger.valueOf(10000L),
- priority = FeePriority.Normal,
- )
+ accountNumber = 2913388UL,
+ sequence = 10UL,
)
val finalAmount = BigInteger.TEN
val result = runBlocking {
- signer.signNativeTransfer(transfer, chainData, finalAmount, FeePriority.Normal, privateKey)
+ signer.signNativeTransfer(
+ transfer,
+ chainData,
+ finalAmount,
+ fee = GasFee(
+ feeAssetId = AssetId(Chain.Osmosis),
+ maxGasPrice = BigInteger.valueOf(10000L),
+ limit = BigInteger.valueOf(200000L),
+ amount = BigInteger.valueOf(10000L),
+ priority = FeePriority.Normal,
+ ),
+ privateKey
+ )
}.first().toHexString()
assertEquals(
"0x7b226d6f6465223a2242524f4144434153545f4d4f44455f53594e43222c2274785f6279746573223" +
@@ -77,21 +82,26 @@ class TestCosmosSigner {
fun testSignStake() {
val transfer = ConfirmParams.Builder(Chain.Osmosis.asset(), osmoAccount, BigInteger.TEN)
.delegate("osmovaloper1pxphtfhqnx9ny27d53z4052e3r76e7qq495ehm")
- val chainData = CosmosSignerPreloader.CosmosChainData(
+ val chainData = CosmosChainData(
chainId = "osmosis-1",
- accountNumber = 2913388L,
- sequence = 10L,
- fee = GasFee(
- feeAssetId = AssetId(Chain.Osmosis),
- maxGasPrice = BigInteger.valueOf(10000L),
- limit = BigInteger.valueOf(200000L),
- amount = BigInteger.valueOf(10000L),
- priority = FeePriority.Normal,
- )
+ accountNumber = 2913388UL,
+ sequence = 10UL,
)
val finalAmount = BigInteger.TEN
val result = runBlocking {
- signer.signDelegate(transfer, chainData, finalAmount, FeePriority.Normal, privateKey)
+ signer.signDelegate(
+ transfer,
+ chainData,
+ finalAmount,
+ fee = GasFee(
+ feeAssetId = AssetId(Chain.Osmosis),
+ maxGasPrice = BigInteger.valueOf(10000L),
+ limit = BigInteger.valueOf(200000L),
+ amount = BigInteger.valueOf(10000L),
+ priority = FeePriority.Normal,
+ ),
+ privateKey
+ )
}.first().toHexString()
assertEquals(
"0x7b226d6f6465223a2242524f4144434153545f4d4f44455f53594e43222c2274785f6279746573223" +
@@ -137,21 +147,26 @@ class TestCosmosSigner {
)
)
)
- val chainData = CosmosSignerPreloader.CosmosChainData(
+ val chainData = CosmosChainData(
chainId = "osmosis-1",
- accountNumber = 2913388L,
- sequence = 10L,
- fee = GasFee(
- feeAssetId = AssetId(Chain.Osmosis),
- maxGasPrice = BigInteger.valueOf(10000L),
- limit = BigInteger.valueOf(200000L),
- amount = BigInteger.valueOf(10000L),
- priority = FeePriority.Normal,
- )
+ accountNumber = 2913388UL,
+ sequence = 10UL,
)
val finalAmount = BigInteger.TEN
val result = runBlocking {
- signer.signUndelegate(transfer, chainData, finalAmount, FeePriority.Normal, privateKey)
+ signer.signUndelegate(
+ transfer,
+ chainData,
+ finalAmount,
+ fee = GasFee(
+ feeAssetId = AssetId(Chain.Osmosis),
+ maxGasPrice = BigInteger.valueOf(10000L),
+ limit = BigInteger.valueOf(200000L),
+ amount = BigInteger.valueOf(10000L),
+ priority = FeePriority.Normal,
+ ),
+ privateKey
+ )
}.first().toHexString()
assertEquals(
"0x7b226d6f6465223a2242524f4144434153545f4d4f44455f53594e43222c2274785f6279746573223" +
@@ -199,21 +214,26 @@ class TestCosmosSigner {
)
)
)
- val chainData = CosmosSignerPreloader.CosmosChainData(
+ val chainData = CosmosChainData(
chainId = "osmosis-1",
- accountNumber = 2913388L,
- sequence = 10L,
- fee = GasFee(
- feeAssetId = AssetId(Chain.Osmosis),
- maxGasPrice = BigInteger.valueOf(10000L),
- limit = BigInteger.valueOf(200000L),
- amount = BigInteger.valueOf(10000L),
- priority = FeePriority.Normal,
- )
+ accountNumber = 2913388UL,
+ sequence = 10UL,
)
val finalAmount = BigInteger.TEN
val result = runBlocking {
- signer.signRedelegate(transfer, chainData, finalAmount, FeePriority.Normal, privateKey)
+ signer.signRedelegate(
+ transfer,
+ chainData,
+ finalAmount,
+ fee = GasFee(
+ feeAssetId = AssetId(Chain.Osmosis),
+ maxGasPrice = BigInteger.valueOf(10000L),
+ limit = BigInteger.valueOf(200000L),
+ amount = BigInteger.valueOf(10000L),
+ priority = FeePriority.Normal,
+ ),
+ privateKey
+ )
}.first().toHexString()
assertEquals(
"0x7b226d6f6465223a2242524f4144434153545f4d4f44455f53594e43222c2274785f6279746573223" +
@@ -245,21 +265,26 @@ class TestCosmosSigner {
"osmovaloper1pxphtfhqnx9ny27d53z4052e3r76e7qq495ehm",
),
)
- val chainData = CosmosSignerPreloader.CosmosChainData(
+ val chainData = CosmosChainData(
chainId = "osmosis-1",
- accountNumber = 2913388L,
- sequence = 10L,
- fee = GasFee(
- feeAssetId = AssetId(Chain.Osmosis),
- maxGasPrice = BigInteger.valueOf(10000L),
- limit = BigInteger.valueOf(200000L),
- amount = BigInteger.valueOf(10000L),
- priority = FeePriority.Normal,
- )
+ accountNumber = 2913388UL,
+ sequence = 10UL,
)
val finalAmount = BigInteger.TEN
val result = runBlocking {
- signer.signRewards(transfer, chainData, finalAmount, FeePriority.Normal, privateKey)
+ signer.signRewards(
+ transfer,
+ chainData,
+ finalAmount,
+ fee = GasFee(
+ feeAssetId = AssetId(Chain.Osmosis),
+ maxGasPrice = BigInteger.valueOf(10000L),
+ limit = BigInteger.valueOf(200000L),
+ amount = BigInteger.valueOf(10000L),
+ priority = FeePriority.Normal,
+ ),
+ privateKey
+ )
}.first().toHexString()
assertEquals(
"0x7b226d6f6465223a2242524f4144434153545f4d4f44455f53594e43222c2274785f6279746573223" +
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEthSign.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEthSign.kt
index 4a15d3ad9..ee7b98019 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEthSign.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEthSign.kt
@@ -1,8 +1,8 @@
package com.gemwallet.android.blockchain.clients.evm
import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.gemwallet.android.blockchain.clients.ethereum.EvmChainData
import com.gemwallet.android.blockchain.clients.ethereum.EvmSignClient
-import com.gemwallet.android.blockchain.clients.ethereum.EvmSignerPreloader
import com.gemwallet.android.blockchain.includeLibs
import com.gemwallet.android.blockchain.testPhrase
import com.gemwallet.android.ext.asset
@@ -46,22 +46,19 @@ class TestEthSign {
destination = DestinationAddress("0x9b1DB81180c31B1b428572Be105E209b5A6222b7"),
from = Account(Chain.Ethereum, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", "")
),
- chainData = EvmSignerPreloader.EvmChainData(
+ chainData = EvmChainData(
chainId = 1,
nonce = BigInteger.ONE,
- fees = listOf(
- GasFee(
- maxGasPrice = BigInteger.TEN,
- limit = BigInteger("21000"),
- minerFee = BigInteger.TEN,
- relay = BigInteger.TEN,
- priority = FeePriority.Normal,
- feeAssetId = Chain.Ethereum.asset().id,
- )
- )
),
finalAmount = BigInteger.TEN.pow(Chain.Ethereum.asset().decimals),
- feePriority = FeePriority.Normal,
+ fee = GasFee(
+ maxGasPrice = BigInteger.TEN,
+ limit = BigInteger("21000"),
+ minerFee = BigInteger.TEN,
+ relay = BigInteger.TEN,
+ priority = FeePriority.Normal,
+ feeAssetId = Chain.Ethereum.asset().id,
+ ),
privateKey,
)
}
@@ -89,22 +86,19 @@ class TestEthSign {
destination = DestinationAddress("0x9b1DB81180c31B1b428572Be105E209b5A6222b7"),
from = Account(Chain.Ethereum, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", "")
),
- chainData = EvmSignerPreloader.EvmChainData(
+ chainData = EvmChainData(
chainId = 1,
nonce = BigInteger.ONE,
- fees = listOf(
- GasFee(
- maxGasPrice = BigInteger.TEN,
- limit = BigInteger("91000"),
- minerFee = BigInteger.TEN,
- relay = BigInteger.TEN,
- priority = FeePriority.Normal,
- feeAssetId = Chain.Ethereum.asset().id,
- )
- )
),
finalAmount = BigInteger.TEN.pow(Chain.Ethereum.asset().decimals),
- feePriority = FeePriority.Normal,
+ fee = GasFee(
+ maxGasPrice = BigInteger.TEN,
+ limit = BigInteger("91000"),
+ minerFee = BigInteger.TEN,
+ relay = BigInteger.TEN,
+ priority = FeePriority.Normal,
+ feeAssetId = Chain.Ethereum.asset().id,
+ ),
privateKey,
)
}
@@ -140,22 +134,19 @@ class TestEthSign {
value = "10",
from = Account(Chain.Ethereum, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", "")
),
- chainData = EvmSignerPreloader.EvmChainData(
+ chainData = EvmChainData(
chainId = 1,
nonce = BigInteger.ONE,
- fees = listOf(
- GasFee(
- maxGasPrice = BigInteger.TEN,
- limit = BigInteger("91000"),
- minerFee = BigInteger.TEN,
- relay = BigInteger.TEN,
- priority = FeePriority.Normal,
- feeAssetId = Chain.Ethereum.asset().id,
- )
- )
),
finalAmount = BigInteger.TEN.pow(Chain.Ethereum.asset().decimals),
- feePriority = FeePriority.Normal,
+ fee = GasFee(
+ maxGasPrice = BigInteger.TEN,
+ limit = BigInteger("91000"),
+ minerFee = BigInteger.TEN,
+ relay = BigInteger.TEN,
+ priority = FeePriority.Normal,
+ feeAssetId = Chain.Ethereum.asset().id,
+ ),
privateKey,
)
}
@@ -177,22 +168,19 @@ class TestEthSign {
from = Account(Chain.Ethereum, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
validatorId = "0x9941BCe2601fC93478DF9f5F6Cc83F4FFC1D71d8"
),
- chainData = EvmSignerPreloader.EvmChainData(
+ chainData = EvmChainData(
chainId = 1,
nonce = BigInteger.ONE,
- fees = listOf(
- GasFee(
- maxGasPrice = BigInteger.TEN,
- limit = BigInteger("91000"),
- minerFee = BigInteger.TEN,
- relay = BigInteger.TEN,
- priority = FeePriority.Normal,
- feeAssetId = Chain.Ethereum.asset().id,
- )
- )
),
finalAmount = BigInteger.TEN.pow(Chain.Ethereum.asset().decimals),
- feePriority = FeePriority.Normal,
+ fee = GasFee(
+ maxGasPrice = BigInteger.TEN,
+ limit = BigInteger("91000"),
+ minerFee = BigInteger.TEN,
+ relay = BigInteger.TEN,
+ priority = FeePriority.Normal,
+ feeAssetId = Chain.Ethereum.asset().id,
+ ),
privateKey,
)
}
@@ -220,22 +208,19 @@ class TestEthSign {
share = "991645728829172501",
balance = "1002901689671695193",
),
- chainData = EvmSignerPreloader.EvmChainData(
+ chainData = EvmChainData(
chainId = 1,
nonce = BigInteger.ONE,
- fees = listOf(
- GasFee(
- maxGasPrice = BigInteger.TEN,
- limit = BigInteger("91000"),
- minerFee = BigInteger.TEN,
- relay = BigInteger.TEN,
- priority = FeePriority.Normal,
- feeAssetId = Chain.Ethereum.asset().id,
- )
- )
),
finalAmount = BigInteger.TEN.pow(Chain.Ethereum.asset().decimals),
- feePriority = FeePriority.Normal,
+ fee = GasFee(
+ maxGasPrice = BigInteger.TEN,
+ limit = BigInteger("91000"),
+ minerFee = BigInteger.TEN,
+ relay = BigInteger.TEN,
+ priority = FeePriority.Normal,
+ feeAssetId = Chain.Ethereum.asset().id,
+ ),
privateKey,
)
}
@@ -268,22 +253,19 @@ class TestEthSign {
provider = "Uniswap v3",
contract = "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
),
- chainData = EvmSignerPreloader.EvmChainData(
+ chainData = EvmChainData(
chainId = 1,
nonce = BigInteger.ONE,
- fees = listOf(
- GasFee(
- maxGasPrice = BigInteger.TEN,
- limit = BigInteger("91000"),
- minerFee = BigInteger.TEN,
- relay = BigInteger.TEN,
- priority = FeePriority.Normal,
- feeAssetId = Chain.SmartChain.asset().id,
- )
- )
),
finalAmount = BigInteger.ZERO,
- feePriority = FeePriority.Normal,
+ fee = GasFee(
+ maxGasPrice = BigInteger.TEN,
+ limit = BigInteger("91000"),
+ minerFee = BigInteger.TEN,
+ relay = BigInteger.TEN,
+ priority = FeePriority.Normal,
+ feeAssetId = Chain.SmartChain.asset().id,
+ ),
privateKey,
)
}
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmBalance.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmBalance.kt
deleted file mode 100644
index 7cd17da45..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmBalance.kt
+++ /dev/null
@@ -1,248 +0,0 @@
-package com.gemwallet.android.blockchain.clients.evm
-
-import com.gemwallet.android.blockchain.clients.ethereum.EvmBalanceClient
-import com.gemwallet.android.blockchain.clients.ethereum.SmartchainStakeClient
-import com.gemwallet.android.blockchain.clients.ethereum.services.EvmBalancesService
-import com.gemwallet.android.blockchain.clients.ethereum.services.EvmCallService
-import com.gemwallet.android.blockchain.clients.ethereum.services.EvmRpcClient
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcRequest
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcResponse
-import com.gemwallet.android.model.getTotalAmount
-import com.wallet.core.primitives.Asset
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.AssetType
-import com.wallet.core.primitives.Chain
-import junit.framework.TestCase.assertEquals
-import junit.framework.TestCase.assertNotNull
-import junit.framework.TestCase.assertNull
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import java.math.BigInteger
-
-class TestEvmBalance {
-
- companion object {
- init {
- includeLibs()
- }
- }
-
- class CallService : EvmCallService {
- override suspend fun callString(request: JSONRpcRequest>): Result> {
- return Result.success(JSONRpcResponse("0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"))
- }
-
- override suspend fun callNumber(request: JSONRpcRequest>): Result> {
- return Result.success(JSONRpcResponse(null))
- }
-
- override suspend fun callBatch(request: List>>): Result>> {
- return Result.success(
- listOf(
- JSONRpcResponse(
- result = "0x00000000000000000000000000000000000000000000000000000000001fdcf1",
- )
- )
- )
- }
-
- }
- class BalanceService : EvmBalancesService {
- var nativeBalanceParam: String = ""
-
- override suspend fun getBalance(request: JSONRpcRequest>): Result> {
- nativeBalanceParam = request.params[0]
- return Result.success(JSONRpcResponse(EvmRpcClient.EvmNumber(BigInteger.TEN.pow(16))))
- }
-
- }
-
- @Test
- fun testNativeBalance() {
- val balanceService = BalanceService()
- val balanceClient = EvmBalanceClient(Chain.Ethereum, CallService(), balanceService, SmartchainStakeClient(Chain.Ethereum, CallService()))
-
- val result = runBlocking {
- balanceClient.getNativeBalance(Chain.Ethereum, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7")
- }
- assertEquals("0x9b1DB81180c31B1b428572Be105E209b5A6222b7", balanceService.nativeBalanceParam)
- assertNotNull(result)
- assertEquals("10000000000000000", result!!.balance.available)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.pending)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.reserved)
- assertEquals(BigInteger.valueOf(10_000_000_000_000_000), result.balance.getTotalAmount())
- assertEquals(0.01, result.balanceAmount.available)
- assertEquals(0.0, result.balanceAmount.rewards)
- assertEquals(0.0, result.balanceAmount.staked)
- assertEquals(0.0, result.balanceAmount.pending)
- assertEquals(0.0, result.balanceAmount.frozen)
- assertEquals(0.0, result.balanceAmount.locked)
- assertEquals(0.0, result.balanceAmount.reserved)
- assertEquals(0.01, result.balanceAmount.getTotalAmount())
- }
-
- @Test
- fun testNativeBalanceBadResponse() {
- var nativeBalanceParam: String = ""
- val balancesService = object : EvmBalancesService {
- override suspend fun getBalance(request: JSONRpcRequest>): Result> {
- nativeBalanceParam = request.params[0]
- return Result.success(JSONRpcResponse(EvmRpcClient.EvmNumber(null)))
- }
-
- }
- val balanceClient = EvmBalanceClient(Chain.Ethereum, CallService(), balancesService, SmartchainStakeClient(Chain.Ethereum, CallService()))
-
- val result = runBlocking {
- balanceClient.getNativeBalance(Chain.Ethereum, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7")
- }
- assertEquals("0x9b1DB81180c31B1b428572Be105E209b5A6222b7", nativeBalanceParam)
- assertNull(result)
- }
-
- @Test
- fun test_native_balance_on_SmartChain_without_delegations() {
- val balanceService = BalanceService()
- val balanceClient = EvmBalanceClient(Chain.SmartChain, CallService(), balanceService, SmartchainStakeClient(Chain.SmartChain, CallService()))
-
- val result = runBlocking {
- balanceClient.getNativeBalance(Chain.SmartChain, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7")
- }
- assertNotNull(result)
- assertEquals("10000000000000000", result!!.balance.available)
- assertEquals("0", result.balance.rewards)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.pending)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.reserved)
- assertEquals(BigInteger.valueOf(10_000_000_000_000_000), result.balance.getTotalAmount())
- }
-
- @Test
- fun test_native_balance_on_SmartChain_with_delegations() {
- val balanceService = BalanceService()
- val callService = object : EvmCallService {
- override suspend fun callString(request: JSONRpcRequest>): Result> {
- val data = when ((request.params[0] as Map<*, *>)["data"]) {
- "0xced0e70e000000000000000000000000ee7e9ccfb529f2c1cc02c0aea8aced7ec7e98b5e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d" -> {
- "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ee7e9ccfb529f2c1cc02c0aea8aced7ec7e98b5e0000000000000000000000009941bce2601fc93478df9f5f6cc83f4ffc1d71d80000000000000000000000000000000000000000000000000deacafbb23d1ee90000000000000000000000000000000000000000000000000dc3088951e56b15"
- }
- "0xd9d4c020000000000000000000000000ee7e9ccfb529f2c1cc02c0aea8aced7ec7e98b5e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d" -> {
- "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"
- }
- "0xc473318f" -> "0x000000000000000000000000000000000000000000000000000000000000002d"
- else -> "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"
- }
- return Result.success(JSONRpcResponse(data))
- }
-
- override suspend fun callNumber(request: JSONRpcRequest>): Result> {
- TODO("Not yet implemented")
- }
-
- override suspend fun callBatch(request: List>>): Result>> {
- return Result.success(
- listOf(
- JSONRpcResponse(
- result = "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ee7e9ccfb529f2c1cc02c0aea8aced7ec7e98b5e0000000000000000000000009941bce2601fc93478df9f5f6cc83f4ffc1d71d80000000000000000000000000000000000000000000000000deacafbb23d1ee90000000000000000000000000000000000000000000000000dc3088951e56b15",
- ),
- JSONRpcResponse(
- result = "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000",
- ),
- )
- )
- }
- }
- val balanceClient = EvmBalanceClient(
- Chain.SmartChain,
- callService,
- balanceService,
- SmartchainStakeClient(Chain.SmartChain, callService)
- )
-
- val result = runBlocking {
- balanceClient.getDelegationBalances(Chain.SmartChain, "0xEe7E9CcFb529f2c1Cc02C0Aea8aCed7Ec7e98B5e")
- }
- assertNotNull(result)
- assertEquals("0", result!!.balance.available)
- assertEquals("0", result.balance.rewards)
- assertEquals("1002837049419308777", result.balance.staked)
- assertEquals("0", result.balance.pending)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.reserved)
- assertEquals(BigInteger.valueOf(1002837049419308777), result.balance.getTotalAmount())
- }
-
- @Test
- fun testTokenBalance() {
- val balanceService = BalanceService()
- val callService = object : EvmCallService {
- override suspend fun callString(request: JSONRpcRequest>): Result> {
- TODO("Not yet implemented")
- }
-
- override suspend fun callNumber(request: JSONRpcRequest>): Result> {
- val result = when ((request.params[0] as Map<*, *>)["to"]) {
- "0x76A797A59Ba2C17726896976B7B3747BfD1d220f" -> "0x00000000000000000000000000000000000000000000000000000002eedef652"
- "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" -> "0x000000000000000000000000000000000000000000000000006a94d74f430000"
- else -> "0x"
- }
- return Result.success(JSONRpcResponse(EvmRpcClient.EvmNumber(BigInteger(result.removePrefix("0x"), 16))))
- }
-
- override suspend fun callBatch(request: List>>): Result>> {
- return Result.success(
- listOf(
- JSONRpcResponse(
- result = "0x00000000000000000000000000000000000000000000000000000002eedef652",
- ),
- JSONRpcResponse(
- result = "0x000000000000000000000000000000000000000000000000006a94d74f430000",
- ),
- )
- )
- }
- }
- val balanceClient = EvmBalanceClient(Chain.SmartChain, callService, balanceService, SmartchainStakeClient(Chain.SmartChain, CallService()))
-
- val result = runBlocking {
- balanceClient.getTokenBalances(
- Chain.SmartChain,
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
- listOf(
- Asset(
- AssetId(Chain.SmartChain, "0x76A797A59Ba2C17726896976B7B3747BfD1d220f"),
- name = "ton",
- symbol = "ton",
- decimals = 9,
- type = AssetType.ERC20
- ),
- Asset(
- AssetId(Chain.SmartChain, "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"),
- name = "Wrapped BNB",
- symbol = "WBNB",
- decimals = 18,
- type = AssetType.ERC20
- ),
- )
- )
- }
- assertNotNull(result)
- assertEquals("12597524050", result[0].balance.available)
- assertEquals("0", result[0].balance.rewards)
- assertEquals("0", result[0].balance.staked)
- assertEquals("0", result[0].balance.pending)
- assertEquals("0", result[0].balance.frozen)
- assertEquals("0", result[0].balance.locked)
- assertEquals("0", result[0].balance.reserved)
- assertEquals(BigInteger.valueOf(12597524050), result[0].balance.getTotalAmount())
- assertEquals("30000000000000000", result[1].balance.available)
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmEncodeApprove.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmEncodeApprove.kt
deleted file mode 100644
index e84ee2cab..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmEncodeApprove.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.gemwallet.android.blockchain.clients.evm
-
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.gemwallet.android.blockchain.clients.ethereum.encodeApprove
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.math.toHexString
-import junit.framework.TestCase.assertEquals
-import org.junit.Test
-import org.junit.runner.RunWith
-import wallet.core.jni.AnyAddress
-import wallet.core.jni.CoinType
-
-@RunWith(AndroidJUnit4::class)
-class TestEvmEncodeApprove {
-
- companion object {
- init {
- includeLibs()
- }
- }
-
- @Test
- fun testEncodeApprove() {
- assertEquals(
- "0x095ea7b30000000000000000000000009b1db81180c31b1b428572be105e209b5a6222b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
- encodeApprove(AnyAddress("0x9b1DB81180c31B1b428572Be105E209b5A6222b7", CoinType.ETHEREUM).data()).toHexString()
- )
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmExtentions.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmExtentions.kt
deleted file mode 100644
index 993bbc677..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmExtentions.kt
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.gemwallet.android.blockchain.clients.evm
-
-import com.gemwallet.android.blockchain.clients.ethereum.encodeTransactionData
-import com.gemwallet.android.blockchain.clients.ethereum.getDestinationAddress
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.math.toHexString
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.Chain
-import com.wallet.core.primitives.EVMChain
-import junit.framework.TestCase.assertEquals
-import org.junit.Test
-import java.math.BigInteger
-
-class TestEvmExtentions {
- companion object {
- init {
- includeLibs()
- }
- }
-
- @Test
- fun testEncodeTransactionData() {
- val result = EVMChain.encodeTransactionData(
- AssetId(Chain.SmartChain, "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"),
- null,
- BigInteger.TEN,
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
- )
- assertEquals(
- "0xa9059cbb0000000000000000000000009b1db81180c31b1b428572be105e209b5a6222b7000000000" +
- "000000000000000000000000000000000000000000000000000000a",
- result.toHexString()
- )
- }
-
- @Test
- fun testEncodeTransactionData_with_memo() {
- val result = EVMChain.encodeTransactionData(
- AssetId(Chain.SmartChain, "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"),
- "0x00000000000000000000000000000000000000000000000000000002eedef652",
- BigInteger.TEN,
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
- )
- assertEquals("0x00000000000000000000000000000000000000000000000000000002eedef652", result.toHexString())
- }
-
- @Test
- fun testGetDestinationAddress_token() {
- val result = EVMChain.getDestinationAddress(
- AssetId(Chain.SmartChain, "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"),
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7"
- )
- assertEquals(result, "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c")
- }
-
- @Test
- fun testGetDestinationAddress_native() {
- val result = EVMChain.getDestinationAddress(
- AssetId(Chain.SmartChain),
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7"
- )
- assertEquals(result, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7")
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmTransactionStatusClient.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmTransactionStatusClient.kt
deleted file mode 100644
index ef02627be..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestEvmTransactionStatusClient.kt
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.gemwallet.android.blockchain.clients.evm
-
-import com.gemwallet.android.blockchain.clients.TransactionStateRequest
-import com.gemwallet.android.blockchain.clients.ethereum.EvmTransactionStatusClient
-import com.gemwallet.android.blockchain.clients.ethereum.services.EvmTransactionsService
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcRequest
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcResponse
-import com.wallet.core.blockchain.ethereum.EthereumTransactionReciept
-import com.wallet.core.primitives.Chain
-import com.wallet.core.primitives.TransactionState
-import junit.framework.TestCase.assertEquals
-import junit.framework.TestCase.assertNotNull
-import junit.framework.TestCase.assertNull
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import java.math.BigInteger
-
-class TestEvmTransactionStatusClient {
- companion object {
- init {
- includeLibs()
- }
- }
-
- @Test
- fun testEvm_transaction_tastus_confirm() {
- val client = EvmTransactionStatusClient(
- chain = Chain.SmartChain,
- transactionsService = object : EvmTransactionsService {
- override suspend fun transaction(request: JSONRpcRequest>): JSONRpcResponse {
- return JSONRpcResponse(
- EthereumTransactionReciept(
- status = "0x1",
- gasUsed = "10",
- effectiveGasPrice = "2",
- l1Fee = "1"
- )
- )
- }
-
- }
- )
- val resullt = runBlocking {
- client.getStatus(
- TransactionStateRequest(
- Chain.SmartChain,
- "0xe84b29d6f06aeb00ba071a409ff057649f19ebbc209114a6a8135a68af589e22",
- "",
- "0x502aECFE253E6AA0e8D2A06E12438FFeD0Fe16a0",
- )
- )
- }
- assertNotNull(resullt)
- assertEquals(TransactionState.Confirmed, resullt.state)
- assertEquals(BigInteger("21"), resullt.fee)
- }
-
- @Test
- fun testEvm_transaction_tastus_fail() {
- val client = EvmTransactionStatusClient(
- chain = Chain.SmartChain,
- transactionsService = object : EvmTransactionsService {
- override suspend fun transaction(request: JSONRpcRequest>): JSONRpcResponse {
- return JSONRpcResponse(
- EthereumTransactionReciept(
- status = "0x0",
- gasUsed = "10",
- effectiveGasPrice = "2",
- l1Fee = "1"
- )
- )
- }
- }
- )
- val resullt = runBlocking {
- client.getStatus(
- TransactionStateRequest(
- Chain.SmartChain,
- "0xe84b29d6f06aeb00ba071a409ff057649f19ebbc209114a6a8135a68af589e22",
- "",
- "0x502aECFE253E6AA0e8D2A06E12438FFeD0Fe16a0",
- )
-
- )
- }
- assertNotNull(resullt)
- assertEquals(TransactionState.Reverted, resullt.state)
- assertEquals(BigInteger("21"), resullt.fee)
- }
-
- @Test
- fun testEvm_transaction_tastus_pending() {
- val client = EvmTransactionStatusClient(
- chain = Chain.SmartChain,
- transactionsService = object : EvmTransactionsService {
- override suspend fun transaction(request: JSONRpcRequest>): JSONRpcResponse {
- return JSONRpcResponse(
- EthereumTransactionReciept(
- status = "0x2",
- gasUsed = "10",
- effectiveGasPrice = "2",
- l1Fee = "1"
- )
- )
- }
-
- }
- )
- val resullt = runBlocking {
- client.getStatus(
- TransactionStateRequest(
- Chain.SmartChain,
- "0xe84b29d6f06aeb00ba071a409ff057649f19ebbc209114a6a8135a68af589e22",
- "",
- "0x502aECFE253E6AA0e8D2A06E12438FFeD0Fe16a0",
- )
- )
- }
- assertNotNull(resullt)
- assertEquals(TransactionState.Pending, resullt.state)
- assertNull(resullt.fee)
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestFeeCalculator.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestFeeCalculator.kt
deleted file mode 100644
index 2023c7f38..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/evm/TestFeeCalculator.kt
+++ /dev/null
@@ -1,421 +0,0 @@
-package com.gemwallet.android.blockchain.clients.evm
-
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.gemwallet.android.blockchain.clients.ethereum.EvmFeeCalculator
-import com.gemwallet.android.blockchain.clients.ethereum.StakeHub
-import com.gemwallet.android.blockchain.clients.ethereum.services.EvmCallService
-import com.gemwallet.android.blockchain.clients.ethereum.services.EvmFeeService
-import com.gemwallet.android.blockchain.clients.ethereum.services.EvmRpcClient
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcRequest
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcResponse
-import com.gemwallet.android.ext.asset
-import com.gemwallet.android.model.ConfirmParams
-import com.gemwallet.android.model.DestinationAddress
-import com.wallet.core.blockchain.ethereum.EthereumFeeHistory
-import com.wallet.core.primitives.Account
-import com.wallet.core.primitives.Asset
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.AssetType
-import com.wallet.core.primitives.Chain
-import com.wallet.core.primitives.FeePriority
-import junit.framework.TestCase.assertEquals
-import junit.framework.TestCase.assertTrue
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import org.junit.runner.RunWith
-import uniffi.gemstone.Config
-import wallet.core.jni.CoinType
-import java.math.BigInteger
-
-@RunWith(AndroidJUnit4::class)
-class TestFeeCalculator {
- companion object {
- init {
- includeLibs()
- }
- }
-
- private class FeeService(
- private val feeHistory: EthereumFeeHistory? = null,
- private val gasLimit: BigInteger = BigInteger.valueOf(21_000),
- ) : EvmFeeService {
-
- var feeHistoryRequest: List = emptyList()
- var gasLimitRequest: List = emptyList()
-
- override suspend fun getFeeHistory(request: JSONRpcRequest>): Result> {
- feeHistoryRequest = request.params
- return Result.success(JSONRpcResponse(feeHistory ?: throw Exception("Fee history fail")))
- }
-
- override suspend fun getGasLimit(request: JSONRpcRequest>): Result> {
- gasLimitRequest = request.params
- return Result.success(JSONRpcResponse(EvmRpcClient.EvmNumber(gasLimit)))
- }
-
- override suspend fun getNonce(request: JSONRpcRequest>): Result> {
- return Result.success(JSONRpcResponse(EvmRpcClient.EvmNumber(BigInteger.ZERO)))
- }
- }
-
- private class CallService : EvmCallService {
- override suspend fun callString(request: JSONRpcRequest>): Result> {
- throw Exception("Call string fail")
- }
-
- override suspend fun callNumber(request: JSONRpcRequest>): Result> {
- return Result.success(JSONRpcResponse(EvmRpcClient.EvmNumber(BigInteger.ONE)))
- }
-
- override suspend fun callBatch(request: List>>): Result>> {
- TODO("Not yet implemented")
- }
- }
-
- @Test
- fun testEvm_transfer_fee_calculation_network_fail_gas_limit() {
- val feeService = object : EvmFeeService {
- override suspend fun getFeeHistory(request: JSONRpcRequest>): Result> {
- return Result.failure(Exception("Fee history fail"))
- }
-
- override suspend fun getGasLimit(request: JSONRpcRequest>): Result> {
- return Result.failure(Exception("Gas limit fail"))
- }
-
- override suspend fun getNonce(request: JSONRpcRequest>): Result> {
- return Result.failure(Exception("Nonce fail"))
- }
- }
- val callService = object : EvmCallService {
- override suspend fun callString(request: JSONRpcRequest>): Result> {
- throw Exception("Call string fail")
- }
-
- override suspend fun callNumber(request: JSONRpcRequest>): Result> {
- throw Exception("Call number fail")
- }
-
- override suspend fun callBatch(request: List>>): Result>> {
- throw Exception("Call number fail")
- }
- }
- try {
- runBlocking {
- EvmFeeCalculator(
- feeService = feeService,
- callService = callService,
- coinType = CoinType.SMARTCHAIN,
- ).calculate(
- ConfirmParams.Builder(
- Chain.SmartChain.asset(),
- Account(Chain.SmartChain, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
- amount = BigInteger.TEN,
- ).transfer(
- DestinationAddress("0x9b1DB81180c31B1b428572Be105E209b5A6222b7")
- ),
- AssetId(Chain.SmartChain),
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
- outputAmount = BigInteger.TEN,
- null,
- chainId = Config().getChainConfig(Chain.SmartChain.string).networkId.toInt(),
- BigInteger.ZERO,
- )
- }
- assertTrue(false)
- } catch (err: Throwable) {
- assertTrue("Unable to calculate base fee" == err.message || "Fail calculate gas limit" == err.message)
- }
- }
-
- @Test
- fun test_Evm_fee_transfer_calculation() {
- val feeService = FeeService(
- EthereumFeeHistory(
- reward = listOf(listOf("0x3b9aca00")),
- baseFeePerGas = listOf("0xa", "0xc"),
- oldestBlock = "",
- gasUsedRatio = emptyList()
- ),
- gasLimit = BigInteger.valueOf(25_000)
- )
- val feeCalculator = EvmFeeCalculator(
- feeService = feeService,
- callService = CallService(),
- coinType = CoinType.SMARTCHAIN,
- )
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- Chain.SmartChain.asset(),
- Account(Chain.SmartChain, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
- amount = BigInteger.TEN,
- ).transfer(
- DestinationAddress("0x9b1DB81180c31B1b428572Be105E209b5A6222b7")
- ),
- AssetId(Chain.SmartChain),
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
- outputAmount = BigInteger.TEN,
- null,
- chainId = Config().getChainConfig(Chain.SmartChain.string).networkId.toInt(),
- BigInteger.ZERO,
- )
- }
- assertEquals(FeePriority.Normal, result[1].priority)
- assertEquals(BigInteger("37500000450000"), result[1].amount)
- assertEquals(BigInteger("1000000000"), result[1].minerFee)
- assertEquals(BigInteger("1000000012"), result[1].maxGasPrice)
- assertEquals(BigInteger("37500"), result[1].limit)
- }
-
- @Test
- fun test_Evm_fee_transfer_max_amount_calculation() {
- val feeService = FeeService(
- EthereumFeeHistory(
- reward = listOf(listOf("0x3b9aca00")),
- baseFeePerGas = listOf("0xa", "0xc"),
- oldestBlock = "",
- gasUsedRatio = emptyList()
- ),
- gasLimit = BigInteger.valueOf(25_000)
- )
- val feeCalculator = EvmFeeCalculator(
- feeService = feeService,
- callService = CallService(),
- coinType = CoinType.SMARTCHAIN,
- )
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- Chain.SmartChain.asset(),
- Account(Chain.SmartChain, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
- amount = BigInteger.TEN,
- ).transfer(
- destination = DestinationAddress("0x9b1DB81180c31B1b428572Be105E209b5A6222b7"),
- isMax = true
- ),
- AssetId(Chain.SmartChain),
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
- outputAmount = BigInteger.TEN,
- null,
- chainId = Config().getChainConfig(Chain.SmartChain.string).networkId.toInt(),
- BigInteger.ZERO,
- )
- }
- assertEquals(FeePriority.Normal, result[1].priority)
- assertEquals(BigInteger("37500000450000"), result[1].amount)
- assertEquals(BigInteger("1000000012"), result[1].minerFee)
- assertEquals(BigInteger("1000000012"), result[1].maxGasPrice)
- assertEquals(BigInteger("37500"), result[1].limit)
- }
-
-
- @Test
- fun test_Evm_gas_limit_native_transfer_calculation() {
- val feeService = FeeService(
- EthereumFeeHistory(
- reward = listOf(listOf("0x3b9aca00")),
- baseFeePerGas = listOf("0x0", "0x0"),
- oldestBlock = "",
- gasUsedRatio = emptyList()
- ),
- gasLimit = BigInteger.valueOf(21_000)
- )
- val feeCalculator = EvmFeeCalculator(
- feeService = feeService,
- callService = CallService(),
- coinType = CoinType.SMARTCHAIN,
- )
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- Chain.SmartChain.asset(),
- Account(Chain.SmartChain, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
- amount = BigInteger.TEN,
- ).transfer(
- DestinationAddress("0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A")
- ),
- AssetId(Chain.SmartChain),
- "0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A",
- outputAmount = BigInteger.TEN,
- null,
- chainId = Config().getChainConfig(Chain.SmartChain.string).networkId.toInt(),
- BigInteger.ZERO,
- )
- }
- assertEquals(FeePriority.Normal, result[1].priority)
- assertEquals(BigInteger("21000000000000"), result[1].amount)
- assertEquals(BigInteger.valueOf(21_000), result[1].limit)
- assertEquals("0x9b1DB81180c31B1b428572Be105E209b5A6222b7", (feeService.gasLimitRequest[0] as Map<*, *>)["from"])
- assertEquals("0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A", (feeService.gasLimitRequest[0] as Map<*, *>)["to"])
- assertEquals("0xa", (feeService.gasLimitRequest[0] as Map<*, *>)["value"])
- assertEquals("0x", (feeService.gasLimitRequest[0] as Map<*, *>)["data"])
- }
-
- @Test
- fun test_Evm_Oracle() {
- val feeService = FeeService(
- EthereumFeeHistory(
- reward = listOf(listOf("0x3b9aca00")),
- baseFeePerGas = listOf("0x0", "0x0"),
- oldestBlock = "",
- gasUsedRatio = emptyList()
- ),
- gasLimit = BigInteger.valueOf(21_000)
- )
- val feeCalculator = EvmFeeCalculator(
- feeService = feeService,
- callService = CallService(),
- coinType = CoinType.SMARTCHAIN,
- )
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- Chain.OpBNB.asset(),
- Account(Chain.OpBNB, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
- amount = BigInteger.TEN,
- ).transfer(
- DestinationAddress("0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A")
- ),
- AssetId(Chain.OpBNB),
- "0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A",
- outputAmount = BigInteger.TEN,
- null,
- chainId = Config().getChainConfig(Chain.OpBNB.string).networkId.toInt(),
- BigInteger.ZERO,
- )
- }
- assertEquals(FeePriority.Normal, result[1].priority)
- assertEquals(BigInteger("21000000001"), result[1].amount)
- assertEquals(BigInteger.valueOf(21_000), result[1].limit)
- assertEquals("0x9b1DB81180c31B1b428572Be105E209b5A6222b7", (feeService.gasLimitRequest[0] as Map<*, *>)["from"])
- assertEquals("0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A", (feeService.gasLimitRequest[0] as Map<*, *>)["to"])
- assertEquals("0xa", (feeService.gasLimitRequest[0] as Map<*, *>)["value"])
- assertEquals("0x", (feeService.gasLimitRequest[0] as Map<*, *>)["data"])
- }
-
- @Test
- fun test_Evm_gas_limit_token_transfer_calculation() {
- val feeService = FeeService(
- EthereumFeeHistory(
- reward = listOf(listOf("0x3b9aca00")),
- baseFeePerGas = listOf("0x0", "0x0"),
- oldestBlock = "",
- gasUsedRatio = emptyList()
- ),
- gasLimit = BigInteger.valueOf(21_000)
- )
- val feeCalculator = EvmFeeCalculator(
- feeService = feeService,
- callService = CallService(),
- coinType = CoinType.SMARTCHAIN,
- )
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- Asset(AssetId(Chain.SmartChain, "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"), name = "usdt", symbol = "usdt", decimals = 8, type = AssetType.TOKEN),
- Account(Chain.SmartChain, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
- amount = BigInteger.TEN,
- ).transfer(
- DestinationAddress("0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A")
- ),
- AssetId(Chain.SmartChain, "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"),
- "0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A",
- outputAmount = BigInteger.TEN,
- null,
- chainId = Config().getChainConfig(Chain.SmartChain.string).networkId.toInt(),
- BigInteger.ZERO,
- )
- }
- assertEquals(FeePriority.Normal, result[1].priority)
- assertEquals(BigInteger("21000000000000"), result[1].amount)
- assertEquals(BigInteger.valueOf(21_000), result[1].limit)
- assertEquals("0x9b1DB81180c31B1b428572Be105E209b5A6222b7", (feeService.gasLimitRequest[0] as Map<*, *>)["from"])
- assertEquals("0x2170ed0880ac9a755fd29b2688956bd959f933f8", (feeService.gasLimitRequest[0] as Map<*, *>)["to"])
- assertEquals("0x0", (feeService.gasLimitRequest[0] as Map<*, *>)["value"])
- assertEquals(
- "0xa9059cbb000000000000000000000000a857a4e4b3f7c0eb7e132a7a4abca287225ddb2a000000000000000000000000000000000000000000000000000000000000000a",
- (feeService.gasLimitRequest[0] as Map<*, *>)["data"]
- )
- }
-
- @Test
- fun test_Evm_gas_limit_delegate_calculation() {
- val feeService = FeeService(
- EthereumFeeHistory(
- reward = listOf(listOf("0x3b9aca00")),
- baseFeePerGas = listOf("0x0", "0x0"),
- oldestBlock = "",
- gasUsedRatio = emptyList()
- ),
- gasLimit = BigInteger.valueOf(21_000)
- )
- val feeCalculator = EvmFeeCalculator(
- feeService = feeService,
- callService = CallService(),
- coinType = CoinType.SMARTCHAIN,
- )
- val params = ConfirmParams.Builder(
- Chain.SmartChain.asset(),
- Account(Chain.SmartChain, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
- amount = BigInteger.TEN,
- ).delegate("0xa857a4E4B3f7C0eb7e132A7A4abcA287225dDB2A")
- val result = runBlocking {
- feeCalculator.calculate(
- params = params,
- assetId = AssetId(Chain.SmartChain),
- recipient = StakeHub.address,
- outputAmount = BigInteger.TEN,
- payload = "0xb",
- chainId = Config().getChainConfig(Chain.SmartChain.string).networkId.toInt(),
- BigInteger.ZERO,
- )
- }
- assertEquals(FeePriority.Normal, result[1].priority)
- assertEquals(BigInteger("21000000000000"), result[1].amount)
- assertEquals(BigInteger.valueOf(21_000), result[1].limit)
- assertEquals("0x9b1DB81180c31B1b428572Be105E209b5A6222b7", (feeService.gasLimitRequest[0] as Map<*, *>)["from"])
- assertEquals("0x0000000000000000000000000000000000002002", (feeService.gasLimitRequest[0] as Map<*, *>)["to"])
- assertEquals("0xa", (feeService.gasLimitRequest[0] as Map<*, *>)["value"])
- assertEquals("0xb", (feeService.gasLimitRequest[0] as Map<*, *>)["data"])
- }
-
- @Test
- fun testEvm_transfer_fee_calculation_network_fail_fee_history() {
- val feeService = FeeService(
- gasLimit = BigInteger.valueOf(21_000)
- )
- try {
- runBlocking {
- EvmFeeCalculator(
- feeService = feeService,
- callService = CallService(),
- coinType = CoinType.SMARTCHAIN,
- ).calculate(
- ConfirmParams.Builder(
- Chain.SmartChain.asset(),
- Account(Chain.SmartChain, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", ""),
- amount = BigInteger.TEN,
- ).transfer(
- DestinationAddress("0x9b1DB81180c31B1b428572Be105E209b5A6222b7")
- ),
- AssetId(Chain.SmartChain),
- "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
- outputAmount = BigInteger.TEN,
- null,
- chainId = Config().getChainConfig(Chain.SmartChain.string).networkId.toInt(),
- BigInteger.ZERO,
- )
- }
- assertTrue(false)
- } catch (err: Throwable) {
- assertEquals("Fee history fail", err.message)
- }
- }
-
- @Test
- fun testEvm_transfer_fee_calculation_network_fail_L1Fee() {
-
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/near/TestNearSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/near/TestNearSigner.kt
index 1db53eab5..599bf0690 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/near/TestNearSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/near/TestNearSigner.kt
@@ -1,6 +1,5 @@
package com.gemwallet.android.blockchain.clients.near
-import com.gemwallet.android.blockchain.clients.near.NearSignerPreloader.NearChainData
import com.gemwallet.android.blockchain.includeLibs
import com.gemwallet.android.blockchain.testPhrase
import com.gemwallet.android.ext.asset
@@ -43,15 +42,14 @@ class TestNearSigner {
),
chainData = NearChainData(
block = "2ADR7pgpkd2uFFkQcAyCxL5YB4d9SewALTLEuFbUUJLe",
- sequence = 134180900000002,
- fee = Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Near),
- amount = BigInteger.TEN
- ),
+ sequence = 134180900000002UL,
),
finalAmount = BigInteger.valueOf(10_000),
- FeePriority.Normal,
+ fee = Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Near),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/polkadot/TestPolkadotSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/polkadot/TestPolkadotSigner.kt
index 8f77cd239..5c9a4faad 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/polkadot/TestPolkadotSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/polkadot/TestPolkadotSigner.kt
@@ -1,10 +1,8 @@
package com.gemwallet.android.blockchain.clients.polkadot
-import com.gemwallet.android.blockchain.clients.polkadot.models.PolkadotSigningData
import com.gemwallet.android.blockchain.includeLibs
import com.gemwallet.android.blockchain.testPhrase
import com.gemwallet.android.ext.asset
-import com.gemwallet.android.math.toHexString
import com.gemwallet.android.model.ConfirmParams
import com.gemwallet.android.model.DestinationAddress
import com.gemwallet.android.model.Fee
@@ -41,33 +39,31 @@ class TestPolkadotSigner {
BigInteger.valueOf(10_000),
DestinationAddress(from),
),
- chainData = PolkadotSignerPreloaderClient.PolkadotChainData(
- sequence = 0,
- data = PolkadotSigningData(
- genesisHash = "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
- blockHash = "0x6e3ffeaa3be9d19bd110e5b6e7cbbc92cceed0d2ec557276c296bf7970ace2e5",
- blockNumber = BigInteger.valueOf(24666537),
- specVersion = BigInteger.valueOf(1003004),
- transactionVersion = BigInteger.valueOf(26),
- period = 64,
- ),
- blockNumber = 24666537,
- fee = Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Polkadot),
- amount = BigInteger.TEN
- ),
+ chainData = PolkadotChainData(
+ sequence = 0UL,
+ genesisHash = "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
+ blockHash = "0x6e3ffeaa3be9d19bd110e5b6e7cbbc92cceed0d2ec557276c296bf7970ace2e5",
+ blockNumber = 24666537UL,
+ specVersion = 1003004UL,
+ transactionVersion = 26UL,
+ period = 64,
),
finalAmount = BigInteger.valueOf(10_000),
- FeePriority.Normal,
+ fee = Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Polkadot),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
- assertEquals("0x35028400cd3cfbbaa8f217c2a29ceae4b4063b597b629861916bad98f9826e03d1ab120e0" +
+ assertEquals(
+ "0x35028400cd3cfbbaa8f217c2a29ceae4b4063b597b629861916bad98f9826e03d1ab120e0" +
"0c094fad2608116257a997619a48d172340c69bca386c9f6b352903ee09a349b4ac90bff77872773" +
"1dac78a56b6c5d901af843ca9c9a69b9e46cca042c4f70c099502000000050000cd3cfbbaa8f217c" +
- "2a29ceae4b4063b597b629861916bad98f9826e03d1ab120e419c", sign.first().toHexString()
+ "2a29ceae4b4063b597b629861916bad98f9826e03d1ab120e419c",
+ String(sign.first())
)
}
}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaAccountsService.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaAccountsService.kt
deleted file mode 100644
index 5399f416e..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaAccountsService.kt
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.gemwallet.android.blockchain.clients.solana
-
-import com.gemwallet.android.blockchain.clients.solana.models.SolanaArrayData
-import com.gemwallet.android.blockchain.clients.solana.models.SolanaInfo
-import com.gemwallet.android.blockchain.clients.solana.models.SolanaParsedData
-import com.gemwallet.android.blockchain.clients.solana.models.SolanaParsedSplTokenInfo
-import com.gemwallet.android.blockchain.clients.solana.services.SolanaAccountsService
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcRequest
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcResponse
-import com.wallet.core.blockchain.solana.SolanaAccount
-import com.wallet.core.blockchain.solana.SolanaAccountParsed
-import com.wallet.core.blockchain.solana.SolanaAccountParsedInfo
-import com.wallet.core.blockchain.solana.SolanaTokenAccount
-import com.wallet.core.blockchain.solana.SolanaTokenAmount
-import com.wallet.core.blockchain.solana.SolanaTokenInfo
-import com.wallet.core.blockchain.solana.SolanaValue
-
-internal class TestSolanaAccountsService(
- private val tokenAddress: String? = null,
- private val owner: String = "",
-) : SolanaAccountsService {
- var tokenAccountRequest: JSONRpcRequest>? = null
-
- override suspend fun getTokenAccountByOwner(request: JSONRpcRequest>): JSONRpcResponse>> {
- tokenAccountRequest = request
- return JSONRpcResponse(
- SolanaValue(
- listOf(
- SolanaTokenAccount(
- pubkey = tokenAddress ?: "",
- account = SolanaAccount(
- lamports = 100000,
- space = 10,
- owner = owner,
- SolanaAccountParsed(
- SolanaAccountParsedInfo(
- SolanaTokenInfo(
- SolanaTokenAmount(tokenAddress ?: (request.params[1] as Map<*, *>)["mint"].toString())
- )
- )
- )
- )
- ),
- )
- )
- )
- }
-
- override suspend fun batchAccount(request: List>>): List>>> {
- return request.mapIndexed { index, request ->
- JSONRpcResponse(
- SolanaValue(
- listOf(
- SolanaTokenAccount(
- pubkey = tokenAddress ?: "",
- account = SolanaAccount(
- lamports = 100000,
- space = 10,
- owner = owner,
- data = SolanaAccountParsed(
- SolanaAccountParsedInfo(
- SolanaTokenInfo(
- SolanaTokenAmount(((index + 1) * 10000000).toString())
- )
- )
- )
- )
- )
- )
- )
- )
- }
- }
-
- override suspend fun getAccountInfoSpl(request: JSONRpcRequest>): JSONRpcResponse>>> {
- TODO("Not yet implemented")
- }
-
- override suspend fun getAccountInfoMpl(request: JSONRpcRequest>): JSONRpcResponse>> {
- TODO("Not yet implemented")
- }
-
- override suspend fun getTokenInfo(request: JSONRpcRequest>): JSONRpcResponse> {
- TODO("Not yet implemented")
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaBalances.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaBalances.kt
deleted file mode 100644
index cec76dad0..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaBalances.kt
+++ /dev/null
@@ -1,299 +0,0 @@
-package com.gemwallet.android.blockchain.clients.solana
-
-import com.gemwallet.android.blockchain.clients.solana.services.SolanaBalancesService
-import com.gemwallet.android.blockchain.clients.solana.services.SolanaStakeService
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcRequest
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcResponse
-import com.gemwallet.android.model.getTotalAmount
-import com.wallet.core.blockchain.solana.SolanaAccount
-import com.wallet.core.blockchain.solana.SolanaAccountParsed
-import com.wallet.core.blockchain.solana.SolanaAccountParsedInfo
-import com.wallet.core.blockchain.solana.SolanaBalance
-import com.wallet.core.blockchain.solana.SolanaBalanceValue
-import com.wallet.core.blockchain.solana.SolanaEpoch
-import com.wallet.core.blockchain.solana.SolanaRentExemptReserve
-import com.wallet.core.blockchain.solana.SolanaStake
-import com.wallet.core.blockchain.solana.SolanaStakeAccount
-import com.wallet.core.blockchain.solana.SolanaStakeDelegation
-import com.wallet.core.blockchain.solana.SolanaStakeInfo
-import com.wallet.core.blockchain.solana.SolanaValidator
-import com.wallet.core.blockchain.solana.SolanaValidators
-import com.wallet.core.blockchain.solana.SolanaValue
-import com.wallet.core.primitives.Asset
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.AssetType
-import com.wallet.core.primitives.Chain
-import junit.framework.TestCase.assertEquals
-import junit.framework.TestCase.assertNotNull
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-
-class TestSolanaBalances {
-
- companion object {
- init {
- includeLibs()
- }
- }
-
- private class TestBalancesService : SolanaBalancesService {
- var nativeRequest: JSONRpcRequest>? = null
- var tokenRequest: JSONRpcRequest>? = null
-
- override suspend fun getBalance(request: JSONRpcRequest>): Result> {
- nativeRequest = request
- return Result.success(
- JSONRpcResponse(
- SolanaBalance(1_000_000)
- )
- )
- }
-
- override suspend fun getTokenBalance(request: JSONRpcRequest>): Result>> {
- tokenRequest = request
- return Result.success(
- JSONRpcResponse(
- SolanaValue(
- SolanaBalanceValue(
- when (request.params[0]) {
- "HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3" -> "5000000"
- else -> "300000"
- }
- )
- )
- )
- )
- }
- }
-
- private class TestStakeService(
- private val delegationsResponse: JSONRpcResponse> = JSONRpcResponse(emptyList())
- ) : SolanaStakeService {
- var validatorsRequest: JSONRpcRequest>? = null
- var delegationsRequest: JSONRpcRequest>? = null
-
- override suspend fun validators(request: JSONRpcRequest>): Result> {
- validatorsRequest = request
- return Result.success(
- JSONRpcResponse(
- SolanaValidators(
- listOf(
- SolanaValidator("validatorPubKey", 10, true)
- )
- )
- )
- )
- }
-
- override suspend fun delegations(request: JSONRpcRequest>): Result>> {
- delegationsRequest = request
-
- return Result.success(delegationsResponse)
- }
-
- override suspend fun epoch(request: JSONRpcRequest>): Result> {
- return Result.success(
- JSONRpcResponse(
- SolanaEpoch(
- epoch = 10,
- slotsInEpoch = 1,
- slotIndex = 1,
- )
- )
- )
- }
- }
-
- @Test
- fun testSolana_balance_native() {
- val accountsService = TestSolanaAccountsService()
- val balancesService = TestBalancesService()
- val stakeService = TestStakeService()
-
- val balanceClient = SolanaBalanceClient(
- chain = Chain.Solana,
- accountsService = accountsService,
- balancesService = balancesService,
- stakeService = stakeService,
- )
- val result = runBlocking {
- balanceClient.getNativeBalance(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh")
- }
- assertEquals("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh", balancesService.nativeRequest!!.params[0])
- assertNotNull(result)
- assertEquals(AssetId(Chain.Solana), result!!.asset.id)
- assertEquals("1000000", result.balance.available)
- assertEquals("0", result.balance.staked)
- assertEquals("0", result.balance.pending)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.rewards)
- }
-
- @Test
- fun testSolana_balance_token() {
- val accountsService = TestSolanaAccountsService()
- val balancesService = TestBalancesService()
- val stakeService = TestStakeService()
-
- val balanceClient = SolanaBalanceClient(
- chain = Chain.Solana,
- accountsService = accountsService,
- balancesService = balancesService,
- stakeService = stakeService,
- )
- val result = runBlocking {
- balanceClient.getTokenBalances(
- Chain.Solana,
- "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh",
- listOf(
- Asset(
- id = AssetId(Chain.Solana, "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"),
- name = "Jupiter",
- symbol = "JUP",
- decimals = 6,
- type = AssetType.TOKEN,
- ),
- Asset(
- id = AssetId(Chain.Solana, "HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3"),
- name = "Pyth Network ",
- symbol = "PYTH",
- decimals = 6,
- type = AssetType.TOKEN,
- ),
- )
- )
- }
- assertNotNull(result)
- assertEquals(2, result.size)
- assertEquals(AssetId(Chain.Solana, "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"), result[0].asset.id)
- assertEquals(AssetId(Chain.Solana, "HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3"), result[1].asset.id)
- assertEquals("10000000", result[0].balance.available)
- assertEquals("20000000", result[1].balance.available)
- }
-
- @Test
- fun testSolana_balance_native_width_single_stake() {
- val accountsService = TestSolanaAccountsService()
- val balancesService = TestBalancesService()
- val stakeService = TestStakeService(
- delegationsResponse = JSONRpcResponse(
- listOf(
- SolanaStakeAccount(
- pubkey = "",
- account = SolanaAccount(
- lamports = 1000000L,
- space = 10,
- owner = "",
- data = SolanaAccountParsed(
- SolanaAccountParsedInfo(
- SolanaStakeInfo(
- SolanaStake(
- SolanaStakeDelegation("", "", "", ""),
- ),
- SolanaRentExemptReserve("")
- )
- )
- )
- )
- )
- )
-
- )
- )
-
- val balanceClient = SolanaBalanceClient(
- chain = Chain.Solana,
- accountsService = accountsService,
- balancesService = balancesService,
- stakeService = stakeService,
- )
- val result = runBlocking {
- balanceClient.getDelegationBalances(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh")
- }
- assertNotNull(result)
- assertEquals(AssetId(Chain.Solana), result!!.asset.id)
- assertEquals("0", result.balance.available)
- assertEquals("1000000", result.balance.staked)
- assertEquals("0", result.balance.pending)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.rewards)
- assertEquals(0.0, result.balanceAmount.available)
- assertEquals(0.001, result.balanceAmount.staked)
- assertEquals(0.001, result.balanceAmount.getTotalAmount())
- }
-
- @Test
- fun testSolana_balance_native_width_multi_stake() {
- val accountsService = TestSolanaAccountsService()
- val balancesService = TestBalancesService()
- val stakeService = TestStakeService(
- delegationsResponse = JSONRpcResponse(
- listOf(
- SolanaStakeAccount(
- pubkey = "",
- account = SolanaAccount(
- lamports = 1000000L,
- space = 10,
- owner = "",
- data = SolanaAccountParsed(
- SolanaAccountParsedInfo(
- SolanaStakeInfo(
- SolanaStake(
- SolanaStakeDelegation("", "", "", ""),
- ),
- SolanaRentExemptReserve("")
- )
- )
- )
- )
- ),
- SolanaStakeAccount(
- pubkey = "",
- account = SolanaAccount(
- lamports = 2000000,
- space = 20,
- owner = "",
- data = SolanaAccountParsed(
- SolanaAccountParsedInfo(
- SolanaStakeInfo(
- SolanaStake(
- SolanaStakeDelegation("", "", "", ""),
- ),
- SolanaRentExemptReserve("")
- )
- )
- )
- )
- )
- )
- )
- )
-
- val balanceClient = SolanaBalanceClient(
- chain = Chain.Solana,
- accountsService = accountsService,
- balancesService = balancesService,
- stakeService = stakeService,
- )
- val result = runBlocking {
- balanceClient.getDelegationBalances(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh")
- }
- assertNotNull(result)
- assertEquals(AssetId(Chain.Solana), result!!.asset.id)
- assertEquals("0", result.balance.available)
- assertEquals("3000000", result.balance.staked)
- assertEquals("0", result.balance.pending)
- assertEquals("0", result.balance.reserved)
- assertEquals("0", result.balance.locked)
- assertEquals("0", result.balance.frozen)
- assertEquals("0", result.balance.rewards)
- assertEquals(0.0, result.balanceAmount.available)
- assertEquals(0.003, result.balanceAmount.staked)
- assertEquals(0.003, result.balanceAmount.getTotalAmount())
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaFeeCalculation.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaFeeCalculation.kt
deleted file mode 100644
index 0c2dc7496..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaFeeCalculation.kt
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.gemwallet.android.blockchain.clients.solana
-
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.ext.asset
-import com.gemwallet.android.model.ConfirmParams
-import com.gemwallet.android.model.DestinationAddress
-import com.wallet.core.primitives.Account
-import com.wallet.core.primitives.Asset
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.AssetType
-import com.wallet.core.primitives.Chain
-import junit.framework.TestCase.assertEquals
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import java.math.BigInteger
-
-class TestSolanaFeeCalculation {
- companion object {
- init {
- includeLibs()
- }
- }
-
- @Test
- fun testSolana_calculate_native_fee() {
- val feeCalculator = SolanaFeeCalculator(TestSolanaFeeService())
-
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- asset = Chain.Solana.asset(),
- from = Account(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh", ""),
- amount = BigInteger.valueOf(10_000_000)
- ).transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh"))
- )
- }
- assertEquals(BigInteger("100005000"), result[1].amount)
- assertEquals(BigInteger("1000000000"), result[1].minerFee)
- assertEquals(BigInteger("5000"), result[1].maxGasPrice)
- assertEquals(BigInteger("100000"), result[1].limit)
- assertEquals(BigInteger("30"), result[1].options["tokenAccountCreation"])
- }
-
- @Test
- fun testSolana_calculate_native_fee_without_priority_fee() {
- val feeCalculator = SolanaFeeCalculator(TestSolanaFeeService(fees = emptyList()))
-
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- asset = Chain.Solana.asset(),
- from = Account(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh", ""),
- amount = BigInteger.valueOf(10_000_000)
- ).transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh"))
- )
- }
- assertEquals(BigInteger("10000"), result[1].amount)
- assertEquals(BigInteger("50000"), result[1].minerFee)
- assertEquals(BigInteger("5000"), result[1].maxGasPrice)
- assertEquals(BigInteger("100000"), result[1].limit)
- assertEquals(BigInteger("30"), result[1].options["tokenAccountCreation"])
- }
-
- @Test
- fun testSolana_calculate_native_fee_without_create() {
- val feeCalculator = SolanaFeeCalculator(TestSolanaFeeService(fees = emptyList()))
-
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- asset = Chain.Solana.asset(),
- from = Account(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh", ""),
- amount = BigInteger.valueOf(10_000_000)
- ).transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh"))
- )
- }
- assertEquals(BigInteger("10000"), result[1].amount)
- assertEquals(BigInteger("50000"), result[1].minerFee)
- assertEquals(BigInteger("5000"), result[1].maxGasPrice)
- assertEquals(BigInteger("100000"), result[1].limit)
- assertEquals(BigInteger("0"), result[1].options["tokenAccountCreation"])
- }
-
- @Test
- fun testSolana_calculate_token_fee_without_create() {
- val feeCalculator = SolanaFeeCalculator(TestSolanaFeeService(listOf(100, 200)))
-
- val result = runBlocking {
- feeCalculator.calculate(
- ConfirmParams.Builder(
- asset = Asset(AssetId(Chain.Solana, "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"), name = "usdt", symbol = "usdt", decimals = 8, type = AssetType.TOKEN),
- from = Account(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh", ""),
- amount = BigInteger.valueOf(10_000_000)
- ).transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh"))
- )
- }
- assertEquals(BigInteger("15000"), result[1].amount)
- assertEquals(BigInteger("100000"), result[1].minerFee)
- assertEquals(BigInteger("5000"), result[1].maxGasPrice)
- assertEquals(BigInteger("100000"), result[1].limit)
- assertEquals(BigInteger("30"), result[1].options["tokenAccountCreation"])
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaFeeService.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaFeeService.kt
deleted file mode 100644
index 5ce88aea8..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaFeeService.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.gemwallet.android.blockchain.clients.solana
-
-import com.gemwallet.android.blockchain.clients.solana.services.SolanaFeeService
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcRequest
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcResponse
-import com.wallet.core.blockchain.solana.SolanaPrioritizationFee
-
-internal class TestSolanaFeeService(
- private val fees: List = listOf(100000000, 2000000000),
-) : SolanaFeeService {
-
- override suspend fun getPriorityFees(request: JSONRpcRequest>): Result>> {
- return Result.success(JSONRpcResponse(fees.map { SolanaPrioritizationFee(it) }))
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaSignPreloader.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaSignPreloader.kt
deleted file mode 100644
index 225f9dfcf..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaSignPreloader.kt
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.gemwallet.android.blockchain.clients.solana
-
-import com.gemwallet.android.blockchain.clients.solana.services.SolanaNetworkInfoService
-import com.gemwallet.android.blockchain.includeLibs
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcRequest
-import com.gemwallet.android.blockchain.rpc.model.JSONRpcResponse
-import com.gemwallet.android.ext.asset
-import com.gemwallet.android.model.ConfirmParams
-import com.gemwallet.android.model.DestinationAddress
-import com.wallet.core.blockchain.solana.SolanaBlockhash
-import com.wallet.core.blockchain.solana.SolanaBlockhashResult
-import com.wallet.core.primitives.Account
-import com.wallet.core.primitives.Asset
-import com.wallet.core.primitives.AssetId
-import com.wallet.core.primitives.AssetType
-import com.wallet.core.primitives.Chain
-import com.wallet.core.primitives.SolanaTokenProgramId
-import junit.framework.TestCase.assertEquals
-import kotlinx.coroutines.runBlocking
-import org.junit.Test
-import java.math.BigInteger
-
-class TestSolanaSignPreloader {
-
- companion object {
- init {
- includeLibs()
- }
- }
-
- private class TestSolanaNetworkInfoService(
- val blockhash: String = "",
- ) : SolanaNetworkInfoService {
-
- override suspend fun getBlockhash(request: JSONRpcRequest>): Result> {
- return Result.success(JSONRpcResponse(SolanaBlockhashResult(SolanaBlockhash(blockhash))))
- }
-
- }
-
- @Test
- fun testSolana_netive_transfer_preload() {
- val preloader = SolanaSignerPreloader(
- chain = Chain.Solana,
- feeService = TestSolanaFeeService(),
- networkInfoService = TestSolanaNetworkInfoService(blockhash = "123"),
- accountsService = TestSolanaAccountsService(),
- )
-
- val result = runBlocking {
- preloader.preloadNativeTransfer(
- ConfirmParams.Builder(
- asset = Chain.Solana.asset(),
- from = Account(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh", ""),
- amount = BigInteger.valueOf(10_000_000)
- )
- .transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh")) as ConfirmParams.TransferParams.Native
- )
- }
- assertEquals(BigInteger("100005000"), result.chainData.gasFee().amount)
- assertEquals("123", (result.chainData as SolanaSignerPreloader.SolanaChainData).blockhash)
- assertEquals(SolanaTokenProgramId.Token, (result.chainData as SolanaSignerPreloader.SolanaChainData).tokenProgram)
- assertEquals(null, (result.chainData as SolanaSignerPreloader.SolanaChainData).recipientTokenAddress)
- assertEquals("", (result.chainData as SolanaSignerPreloader.SolanaChainData).senderTokenAddress)
- }
-
- @Test
- fun testSolana_transfer_token_preload() {
- val preloader = SolanaSignerPreloader(
- chain = Chain.Solana,
- feeService = TestSolanaFeeService(),
- networkInfoService = TestSolanaNetworkInfoService(blockhash = "123"),
- accountsService = TestSolanaAccountsService(
- "DVWPV7brSbPDkA7a3qdn6UJsVc3J3DyhQhjNaZeZqwzo",
- "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
- ),
- )
-
- val result = runBlocking {
- preloader.preloadTokenTransfer(
- ConfirmParams.Builder(
- asset = Asset(AssetId(Chain.Solana, "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"), name = "usdt", symbol = "usdt", decimals = 8, type = AssetType.TOKEN),
- from = Account(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh", ""),
- amount = BigInteger.valueOf(10_000_000)
- )
- .transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh")) as ConfirmParams.TransferParams.Token
- )
- }
- assertEquals(BigInteger("100005000"), result.chainData.gasFee().amount)
- assertEquals("123", (result.chainData as SolanaSignerPreloader.SolanaChainData).blockhash)
- assertEquals(SolanaTokenProgramId.Token, (result.chainData as SolanaSignerPreloader.SolanaChainData).tokenProgram)
- assertEquals("DVWPV7brSbPDkA7a3qdn6UJsVc3J3DyhQhjNaZeZqwzo", (result.chainData as SolanaSignerPreloader.SolanaChainData).recipientTokenAddress)
- assertEquals("DVWPV7brSbPDkA7a3qdn6UJsVc3J3DyhQhjNaZeZqwzo", (result.chainData as SolanaSignerPreloader.SolanaChainData).senderTokenAddress)
- }
-
- @Test
- fun testSolana_transfer_token2022_preload() {
- val preloader = SolanaSignerPreloader(
- chain = Chain.Solana,
- feeService = TestSolanaFeeService(),
- networkInfoService = TestSolanaNetworkInfoService(blockhash = "123"),
- accountsService = TestSolanaAccountsService(
- "87vTugUvkkepa84mBRfENnvkPQRj5EZSkiG8XyFAhbQQ",
- "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
- ),
- )
-
- val result = runBlocking {
- preloader.preloadTokenTransfer(
- ConfirmParams.Builder(
- asset = Asset(AssetId(Chain.Solana, "2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo"), name = "smt", symbol = "", decimals = 8, type = AssetType.TOKEN),
- from = Account(Chain.Solana, "AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh", ""),
- amount = BigInteger.valueOf(10_000_000)
- )
- .transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh")) as ConfirmParams.TransferParams.Token
- )
- }
- assertEquals(BigInteger("100005000"), result.chainData.gasFee().amount)
- assertEquals("123", (result.chainData as SolanaSignerPreloader.SolanaChainData).blockhash)
- assertEquals(SolanaTokenProgramId.Token2022, (result.chainData as SolanaSignerPreloader.SolanaChainData).tokenProgram)
- assertEquals("87vTugUvkkepa84mBRfENnvkPQRj5EZSkiG8XyFAhbQQ", (result.chainData as SolanaSignerPreloader.SolanaChainData).recipientTokenAddress)
- assertEquals("87vTugUvkkepa84mBRfENnvkPQRj5EZSkiG8XyFAhbQQ", (result.chainData as SolanaSignerPreloader.SolanaChainData).senderTokenAddress)
- }
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaSigner.kt
index 144dae779..643bd066d 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/solana/TestSolanaSigner.kt
@@ -46,14 +46,22 @@ class TestSolanaSigner {
}
)
val params = ConfirmParams.Builder(
- asset = Chain.Solana.asset(),
- from = Account(Chain.Solana, "4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S", ""),
- amount = BigInteger.valueOf(10_000_000)
- )
+ asset = Chain.Solana.asset(),
+ from = Account(Chain.Solana, "4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S", ""),
+ amount = BigInteger.valueOf(10_000_000)
+ )
.transfer(destination = DestinationAddress("4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S")) as ConfirmParams.TransferParams.Native
- val chainData = SolanaSignerPreloader.SolanaChainData(
+ val chainData = SolanaChainData(
blockhash = "kiEPF6aKvEsj5nbi4FBvgRRm9ha36Y3cgDU9qnUKt32",
- fees = listOf(
+ recipientTokenAddress = null,
+ senderTokenAddress = "",
+ tokenProgram = SolanaTokenProgramId.Token
+ )
+ val result = runBlocking {
+ signer.signNativeTransfer(
+ params,
+ chainData,
+ BigInteger.ZERO,
GasFee(
amount = BigInteger("105005000"),
minerFee = BigInteger("1050000000"),
@@ -62,22 +70,21 @@ class TestSolanaSigner {
feeAssetId = AssetId(Chain.Solana),
priority = FeePriority.Normal,
),
- ),
- recipientTokenAddress = null,
- senderTokenAddress = "",
- tokenProgram = SolanaTokenProgramId.Token
+ privateKey
+ )
+ }
+ assertEquals(
+ "0x4159436b734f696556323339774436566c6841614a41464844544a647a632f61577a3331" +
+ "6f693676686e783978676d4c544a5372643165504634454e73734a704867667575424e6e55556b3" +
+ "159304a52784e504a59513442414149455365626b44466a2b415242396b4b486b394f4167745057" +
+ "456e614370426a475a3869707a61372f4e43577330767554324f647746546758414767305a61753" +
+ "17474703157354f7153437a77434c53384e5738357a71514d47526d2f6c495263792f2b7974756e" +
+ "4c446d2b65386a4f573778666353617978446d7a704141414141414141414141414141414141414" +
+ "141414141414141414141414141414141414141414141414141414141414c4d706730536d427863" +
+ "684e486e756872566468464259677863634c722b5370616932436959444a4b51514d4341416b446" +
+ "74c71565067414141414143414155436f49594241414d434141454d416741414141414141414141" +
+ "41414141", result.first().toHexString()
)
- val result = runBlocking { signer.signNativeTransfer(params, chainData, BigInteger.ZERO, FeePriority.Normal, privateKey) }
- assertEquals("0x4159436b734f696556323339774436566c6841614a41464844544a647a632f61577a3331" +
- "6f693676686e783978676d4c544a5372643165504634454e73734a704867667575424e6e55556b3" +
- "159304a52784e504a59513442414149455365626b44466a2b415242396b4b486b394f4167745057" +
- "456e614370426a475a3869707a61372f4e43577330767554324f647746546758414767305a61753" +
- "17474703157354f7153437a77434c53384e5738357a71514d47526d2f6c495263792f2b7974756e" +
- "4c446d2b65386a4f573778666353617978446d7a704141414141414141414141414141414141414" +
- "141414141414141414141414141414141414141414141414141414141414c4d706730536d427863" +
- "684e486e756872566468464259677863634c722b5370616932436959444a4b51514d4341416b446" +
- "74c71565067414141414143414155436f49594241414d434141454d416741414141414141414141" +
- "41414141", result.first().toHexString())
}
@Test
@@ -95,14 +102,28 @@ class TestSolanaSigner {
}
)
val params = ConfirmParams.Builder(
- asset = Asset(AssetId(Chain.Solana, "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"), "", "", 8, AssetType.TOKEN),
- from = Account(Chain.Solana, "4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S", ""),
- amount = BigInteger.valueOf(10_000_000)
- )
+ asset = Asset(
+ AssetId(Chain.Solana, "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),
+ "",
+ "",
+ 8,
+ AssetType.TOKEN
+ ),
+ from = Account(Chain.Solana, "4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S", ""),
+ amount = BigInteger.valueOf(10_000_000)
+ )
.transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh")) as ConfirmParams.TransferParams.Token
- val chainData = SolanaSignerPreloader.SolanaChainData(
+ val chainData = SolanaChainData(
blockhash = "kiEPF6aKvEsj5nbi4FBvgRRm9ha36Y3cgDU9qnUKt32",
- fees = listOf(
+ recipientTokenAddress = "DVWPV7brSbPDkA7a3qdn6UJsVc3J3DyhQhjNaZeZqwzo",
+ senderTokenAddress = "DVWPV7brSbPDkA7a3qdn6UJsVc3J3DyhQhjNaZeZqwzo",
+ tokenProgram = SolanaTokenProgramId.Token
+ )
+ val result = runBlocking {
+ signer.signTokenTransfer(
+ params,
+ chainData,
+ BigInteger.ZERO,
GasFee(
amount = BigInteger("105005000"),
minerFee = BigInteger("1050000000"),
@@ -110,24 +131,23 @@ class TestSolanaSigner {
limit = BigInteger("100000"),
feeAssetId = AssetId(Chain.Solana),
priority = FeePriority.Normal,
- )
- ),
- recipientTokenAddress = "DVWPV7brSbPDkA7a3qdn6UJsVc3J3DyhQhjNaZeZqwzo",
- senderTokenAddress = "DVWPV7brSbPDkA7a3qdn6UJsVc3J3DyhQhjNaZeZqwzo",
- tokenProgram = SolanaTokenProgramId.Token
+ ),
+ privateKey
+ )
+ }
+ assertEquals(
+ "0x416238786c7268464374766e72677357477874416f6b6852423654737057545862643066" +
+ "6e31557835466c736b734b317838714d6668326e313662454d384d6b6a4a4d467450664b7046684" +
+ "25a376576716557713051514241414d465365626b44466a2b415242396b4b486b394f4167745057" +
+ "456e614370426a475a3869707a61372f4e435775356d6277492b744e3454586473757149654b725" +
+ "254647a734b644444707a385843635179334a766a50304d3442446d43763762496e4637316a4753" +
+ "395546466f2f6c6c6f7a75344c5378774b657373346549494a6b41775a47622b5568467a4c2f374" +
+ "b323663734f623537794d3562764639784a724c454f624f6b41414141414733666268313257686b" +
+ "396e4c3455624f36336d73484c5346375639624e3545366a50574666763841715173796d44524b5" +
+ "948467945306565364774563245554669444678777576354b6c714c594b4a674d6b704241774d41" +
+ "43514f417570552b4141414141414d4142514b67686745414241514241674541436777414141414" +
+ "1414141414141593d", result.first().toHexString()
)
- val result = runBlocking { signer.signTokenTransfer(params, chainData, BigInteger.ZERO, FeePriority.Normal, privateKey) }
- assertEquals("0x416238786c7268464374766e72677357477874416f6b6852423654737057545862643066" +
- "6e31557835466c736b734b317838714d6668326e313662454d384d6b6a4a4d467450664b7046684" +
- "25a376576716557713051514241414d465365626b44466a2b415242396b4b486b394f4167745057" +
- "456e614370426a475a3869707a61372f4e435775356d6277492b744e3454586473757149654b725" +
- "254647a734b644444707a385843635179334a766a50304d3442446d43763762496e4637316a4753" +
- "395546466f2f6c6c6f7a75344c5378774b657373346549494a6b41775a47622b5568467a4c2f374" +
- "b323663734f623537794d3562764639784a724c454f624f6b41414141414733666268313257686b" +
- "396e4c3455624f36336d73484c5346375639624e3545366a50574666763841715173796d44524b5" +
- "948467945306565364774563245554669444678777576354b6c714c594b4a674d6b704241774d41" +
- "43514f417570552b4141414141414d4142514b67686745414241514241674541436777414141414" +
- "1414141414141593d", result.first().toHexString())
}
@Test
@@ -145,14 +165,28 @@ class TestSolanaSigner {
}
)
val params = ConfirmParams.Builder(
- asset = Asset(AssetId(Chain.Solana, "2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo"), "", "", 8, AssetType.TOKEN),
- from = Account(Chain.Solana, "4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S", ""),
- amount = BigInteger.valueOf(10_000_000)
- )
+ asset = Asset(
+ AssetId(Chain.Solana, "2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo"),
+ "",
+ "",
+ 8,
+ AssetType.TOKEN
+ ),
+ from = Account(Chain.Solana, "4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S", ""),
+ amount = BigInteger.valueOf(10_000_000)
+ )
.transfer(destination = DestinationAddress("AGkXQZ9qm99xukisDUHvspWHESrcjs8Y4AmQQgef3BRh")) as ConfirmParams.TransferParams.Token
- val chainData = SolanaSignerPreloader.SolanaChainData(
+ val chainData = SolanaChainData(
blockhash = "kiEPF6aKvEsj5nbi4FBvgRRm9ha36Y3cgDU9qnUKt32",
- fees = listOf(
+ recipientTokenAddress = "87vTugUvkkepa84mBRfENnvkPQRj5EZSkiG8XyFAhbQQ",
+ senderTokenAddress = "87vTugUvkkepa84mBRfENnvkPQRj5EZSkiG8XyFAhbQQ",
+ tokenProgram = SolanaTokenProgramId.Token2022
+ )
+ val result = runBlocking {
+ signer.signTokenTransfer(
+ params,
+ chainData,
+ BigInteger.ZERO,
GasFee(
amount = BigInteger("105005000"),
minerFee = BigInteger("1050000000"),
@@ -161,23 +195,22 @@ class TestSolanaSigner {
feeAssetId = AssetId(Chain.Solana),
priority = FeePriority.Normal,
),
- ),
- recipientTokenAddress = "87vTugUvkkepa84mBRfENnvkPQRj5EZSkiG8XyFAhbQQ",
- senderTokenAddress = "87vTugUvkkepa84mBRfENnvkPQRj5EZSkiG8XyFAhbQQ",
- tokenProgram = SolanaTokenProgramId.Token2022
+ privateKey
+ )
+ }
+ assertEquals(
+ "0x4152744d346e59365642416d427563754c675a7759623165304764516d6b782b6251764f" +
+ "6241657558466e6a4b5a4744507930653972305249444f384757705056384439453345754b33416" +
+ "e492b354b6b6d72485667414241414d465365626b44466a2b415242396b4b486b394f4167745057" +
+ "456e614370426a475a3869707a61372f4e43577470783737467363375a7773776d4234324a65393" +
+ "04538487a622b59486131534a74465451777a385351705265535344747369697148743063646755" +
+ "2b566b666b355849514b6e4f505a394e57366654704c696e536541775a47622b5568467a4c2f374" +
+ "b323663734f623537794d3562764639784a724c454f624f6b41414141414733666268376e575033" +
+ "68684358627a6b624d33617468723854594f354453662b76666b6f324b474c2f4173796d44524b5" +
+ "948467945306565364774563245554669444678777576354b6c714c594b4a674d6b704241774d41" +
+ "43514f417570552b4141414141414d4142514b67686745414241514241674541436777414141414" +
+ "1414141414141593d", result.first().toHexString()
)
- val result = runBlocking { signer.signTokenTransfer(params, chainData, BigInteger.ZERO, FeePriority.Normal, privateKey) }
- assertEquals("0x4152744d346e59365642416d427563754c675a7759623165304764516d6b782b6251764f" +
- "6241657558466e6a4b5a4744507930653972305249444f384757705056384439453345754b33416" +
- "e492b354b6b6d72485667414241414d465365626b44466a2b415242396b4b486b394f4167745057" +
- "456e614370426a475a3869707a61372f4e43577470783737467363375a7773776d4234324a65393" +
- "04538487a622b59486131534a74465451777a385351705265535344747369697148743063646755" +
- "2b566b666b355849514b6e4f505a394e57366654704c696e536541775a47622b5568467a4c2f374" +
- "b323663734f623537794d3562764639784a724c454f624f6b41414141414733666268376e575033" +
- "68684358627a6b624d33617468723854594f354453662b76666b6f324b474c2f4173796d44524b5" +
- "948467945306565364774563245554669444678777576354b6c714c594b4a674d6b704241774d41" +
- "43514f417570552b4141414141414d4142514b67686745414241514241674541436777414141414" +
- "1414141414141593d", result.first().toHexString())
}
@Test
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/stellar/TestStellarSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/stellar/TestStellarSigner.kt
index 3c85574ae..0949c1649 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/stellar/TestStellarSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/stellar/TestStellarSigner.kt
@@ -1,7 +1,7 @@
package com.gemwallet.android.blockchain.clients.Stellar
+import com.gemwallet.android.blockchain.clients.stellar.StellarChainData
import com.gemwallet.android.blockchain.clients.stellar.StellarSignClient
-import com.gemwallet.android.blockchain.clients.stellar.StellarSignPreloadClient
import com.gemwallet.android.blockchain.includeLibs
import com.gemwallet.android.blockchain.testPhrase
import com.gemwallet.android.ext.asset
@@ -42,18 +42,16 @@ class TestStellarSigner {
BigInteger.valueOf(10_000),
DestinationAddress(from),
),
- chainData = StellarSignPreloadClient.StellarChainData(
- sequence = 1,
- fees = listOf(
- Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Stellar),
- amount = BigInteger.TEN
- ),
- ),
+ chainData = StellarChainData(
+ sequence = 1UL,
+ isDestinationAddressExist = true,
),
finalAmount = BigInteger.valueOf(10_000),
- FeePriority.Normal,
+ Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Stellar),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/sui/TestSuiSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/sui/TestSuiSigner.kt
index 11fd6eee3..cbf25edf0 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/sui/TestSuiSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/sui/TestSuiSigner.kt
@@ -42,21 +42,20 @@ class TestSuiSigner {
BigInteger.valueOf(10_000),
DestinationAddress(from),
),
- chainData = SuiSignerPreloader.SuiChainData(
+ chainData = SuiChainData(
messageBytes = "AAACAAgAypo7AAAAAAAgLuHnHoVlKe7YHnpDy6mnmWueg/fpbWoPf2pUAO0b" +
"wWgCAgABAQAAAQEDAAAAAAEBAC7h5x6FZSnu2B56Q8upp5lrnoP36W1qD39qVADtG8F" +
"oAS2bHegcizOpgucdlh7PdMz4cCyV89Xv8+pSQHYdUVM07UIbGgAAAAAgbiAG3TMqRi" +
"5eRLenwRl5FY6EUk6/RG4a4cjnsc8KNU0u4ecehWUp7tgeekPLqaeZa56D9+ltag9/a" +
"lQA7RvBaO4CAAAAAAAAQHh9AQAAAAAA_0xc6af5cd37f2bab89411aff2a642522f88" +
"6e3a8bdfea1d0549729e99f3a241bd5",
- fee = Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Sui),
- amount = BigInteger.TEN
- ),
),
finalAmount = BigInteger.valueOf(10_000),
- FeePriority.Normal,
+ fee = Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Sui),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
@@ -89,7 +88,7 @@ class TestSuiSigner {
BigInteger.valueOf(10_000),
DestinationAddress(from),
),
- chainData = SuiSignerPreloader.SuiChainData(
+ chainData = SuiChainData(
messageBytes = "AAAEAQA+cu/kqxz/pp3Qmo6eoLJz+so76TaSloB1SmEUVhWCaUYoGhwAAAAAI" +
"BtZ+Y3WbB+PQtHrS7YgMDZGLzVxrT20trS/6hpbAEmBAQC01EdV46fEpnMdgod7BT2jJ" +
"F0uO3bB4vxKQwUM5D5LgUYoGhwAAAAAIG7IzS1+nt9AlH/Ky7M7uvu/hnOkXUjbo13FT" +
@@ -99,14 +98,13 @@ class TestSuiSigner {
"+S2gTgAQzNMurZ1aIQOw24OKmyO5LC3mt0mBR+cLuHnHoVlKe7YHnpDy6mnmWueg/fpb" +
"WoPf2pUAO0bwWjuAgAAAAAAAEB4fQEAAAAAAA==_0xd3877ebdd9f50a6d7d919d6e28" +
"a26dd62ec43db0986466a35fa78c84394d3046",
- fee = Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Sui),
- amount = BigInteger.TEN
- ),
),
finalAmount = BigInteger.valueOf(10_000),
- FeePriority.Normal,
+ fee = Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Sui),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/ton/TestTonSigner.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/ton/TestTonSigner.kt
index d2dab1666..530953017 100644
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/ton/TestTonSigner.kt
+++ b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/ton/TestTonSigner.kt
@@ -42,17 +42,16 @@ class TestTonSigner {
BigInteger.valueOf(10_000),
DestinationAddress(from),
),
- chainData = TonSignerPreloader.TonChainData(
- sequence = 1,
- fee = Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Ton),
- amount = BigInteger.TEN
- ),
+ chainData = TonChainData(
+ sequence = 1UL,
expireAt = 1000000000,
),
finalAmount = BigInteger.valueOf(10_000),
- FeePriority.Normal,
+ fee = Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Ton),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
@@ -81,18 +80,17 @@ class TestTonSigner {
BigInteger.valueOf(10_000),
DestinationAddress(from),
),
- chainData = TonSignerPreloader.TonChainData(
- sequence = 1,
+ chainData = TonChainData(
+ sequence = 1UL,
jettonAddress = "EQAlgB03OjJKdXrlwZiGJD5snSzPKF2VL5bErJn_cqJANGH9",
expireAt = 1000000000,
- fee = Fee(
- priority = FeePriority.Normal,
- feeAssetId = AssetId(Chain.Ton),
- amount = BigInteger.TEN
- ),
),
finalAmount = BigInteger.valueOf(10_000),
- FeePriority.Normal,
+ fee = Fee(
+ priority = FeePriority.Normal,
+ feeAssetId = AssetId(Chain.Ton),
+ amount = BigInteger.TEN
+ ),
privateKey.data(),
)
}
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/tron/FakeTronAccountService.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/tron/FakeTronAccountService.kt
deleted file mode 100644
index 68094d89b..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/tron/FakeTronAccountService.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.gemwallet.android.blockchain.clients.tron
-
-import com.gemwallet.android.blockchain.clients.tron.services.TronAccountsService
-import com.wallet.core.blockchain.tron.TronAccount
-import com.wallet.core.blockchain.tron.TronAccountRequest
-import com.wallet.core.blockchain.tron.TronAccountUsage
-
-class FakeTronAccountService(
- private val tronAccount: TronAccount? = null
-) : TronAccountsService {
- var accountRequest: TronAccountRequest? = null
- var usageRequest: TronAccountRequest? = null
-
- override suspend fun getAccount(addressRequest: TronAccountRequest): Result {
- this.accountRequest = addressRequest
- return Result.success(tronAccount ?: return Result.failure(Exception()))
- }
-
- override suspend fun getAccountUsage(addressRequest: TronAccountRequest): Result {
- this.usageRequest = addressRequest
-
- return Result.success(
- TronAccountUsage(
- freeNetUsed = 1,
- freeNetLimit = 2,
- )
- )
- }
-
-
-}
\ No newline at end of file
diff --git a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/tron/FakeTronCallService.kt b/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/tron/FakeTronCallService.kt
deleted file mode 100644
index daa6a7a0b..000000000
--- a/blockchain/src/androidTest/kotlin/com/gemwallet/android/blockchain/clients/tron/FakeTronCallService.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.gemwallet.android.blockchain.clients.tron
-
-import com.gemwallet.android.blockchain.clients.tron.services.TronCallService
-import com.wallet.core.blockchain.tron.TronSmartContractResult
-
-class FakeTronCallService(
- val responses: Map = emptyMap()
-) : TronCallService {
- val requests = mutableListOf