Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
aca7e1a
Add new design for preload tx data
furenster Dec 3, 2024
6f13b26
Integrate new preloader model
furenster Dec 3, 2024
d343525
Merge branch 'main' into improve_sending
furenster Dec 3, 2024
0c67c89
Update core
furenster Dec 3, 2024
3c3031e
Reformat code
furenster Dec 4, 2024
60d0362
Improve unpack transaction params
furenster Dec 4, 2024
f3ec16b
Fix ui
furenster Dec 4, 2024
8279771
Fix tron preload
furenster Dec 4, 2024
caf6998
Fix icon
furenster Dec 4, 2024
f722e25
Update tests
furenster Dec 5, 2024
1cf1795
Clean code
furenster Dec 5, 2024
cc41d5a
Change package
furenster Dec 5, 2024
2b0fee5
Add aptos preload tests
furenster Dec 5, 2024
b95be6d
Add aptos balance tests
furenster Dec 5, 2024
70d527d
Add aptos sign test
furenster Dec 5, 2024
3f6f67a
Add aptos broadcast test
furenster Dec 5, 2024
e59aa6f
Add aptos transaction status test
furenster Dec 5, 2024
7cb1bf8
Add bitcoin balance tests
furenster Dec 6, 2024
472c06e
Add bitcon sign preloader tests
furenster Dec 6, 2024
fb9f515
Add bitcoin sign test
furenster Dec 6, 2024
3c2a457
Add bitcoin broadcast test
furenster Dec 6, 2024
b60c42a
Add bitcoin transaction status tests
furenster Dec 6, 2024
1579f3e
Add cosmos balances test
furenster Dec 6, 2024
cceab5b
Change package
furenster Dec 6, 2024
5ef31a9
Add cosmos preload tests
furenster Dec 6, 2024
8c73285
Fix error
furenster Dec 6, 2024
8ceedf2
Fix rpc client
furenster Dec 8, 2024
0e32246
Add cosmos stake client tests
furenster Dec 9, 2024
8a95462
Add cosmos sign tests
furenster Dec 9, 2024
8fe9d55
Add cosmos transaction status tests
furenster Dec 9, 2024
de98164
Fix names
furenster Dec 9, 2024
f1093c6
Add cosmos broadcast tests
furenster Dec 9, 2024
20352b5
Add abi test
furenster Dec 9, 2024
d88e8b0
Add evm balances tests
furenster Dec 9, 2024
897c1fd
Fix tests
furenster Dec 9, 2024
a7ef449
Fix tests
furenster Dec 9, 2024
77ff748
Add evm balance tests
furenster Dec 10, 2024
133c6d5
Add tests on evm extentions
furenster Dec 10, 2024
bb6cf99
Add evm fee calculator tests
furenster Dec 10, 2024
ab63251
Merge branch 'main' into improve_sending
furenster Dec 11, 2024
5301dd2
Fix tests optimize network calls
furenster Dec 11, 2024
6629018
Add evm sign tests
furenster Dec 11, 2024
83aaa79
Clean code
furenster Dec 11, 2024
fdce48c
Add evm transaction status tests
furenster Dec 11, 2024
2c37d52
Merge branch 'main' into improve_sending
furenster Dec 12, 2024
ab14270
Add solana balance test
furenster Dec 12, 2024
04d87f4
Add token balances test
furenster Dec 12, 2024
8e8853b
Update core
furenster Dec 12, 2024
097d92f
Merge branch 'main' into improve_sending
furenster Dec 13, 2024
ef78d98
Add solana fee calculation tests
furenster Dec 13, 2024
8f98c2a
Add solana sign preload tests
furenster Dec 13, 2024
385457c
Add solana signer test
furenster Dec 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package wallet.android.app

import com.gemwallet.android.model.ConfirmParams
import com.wallet.core.primitives.Account
import com.wallet.core.primitives.AssetId
import com.wallet.core.primitives.Chain
import com.wallet.core.primitives.TransactionType
import org.junit.Assert.assertEquals
import org.junit.Test
import java.math.BigInteger
Expand All @@ -16,9 +18,9 @@ class ConfirmParamsTest {
}
@Test
fun testConfirmParamsPack() {
val params: ConfirmParams = ConfirmParams.DelegateParams(AssetId(Chain.Cosmos), amount = BigInteger.TEN, validatorId = "cosmosaddress")
val params: ConfirmParams = ConfirmParams.Stake.DelegateParams(AssetId(Chain.Cosmos), amount = BigInteger.TEN, validatorId = "cosmosaddress", from = Account(Chain.Cosmos, "", "", ""))
val pack = params.pack()
val unpack = ConfirmParams.unpack(ConfirmParams.DelegateParams::class.java, pack!!)!!
assertEquals("cosmosaddress", unpack.validatorId)
val unpack = ConfirmParams.unpack(TransactionType.StakeDelegate, pack!!)
assertEquals("cosmosaddress", (unpack as ConfirmParams.Stake.DelegateParams).validatorId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.gemwallet.android.model.DestinationAddress
import com.gemwallet.android.model.GasFee
import com.gemwallet.android.model.SignerParams
import com.gemwallet.android.model.TxSpeed
import com.wallet.core.primitives.Account
import com.wallet.core.primitives.Chain
import kotlinx.coroutines.runBlocking
import org.junit.Assert
Expand All @@ -32,22 +33,22 @@ class TestAptosSign {
val sign = runBlocking {
signClient.signTransfer(
params = SignerParams(
input = ConfirmParams.TransferParams(
assetId = com.wallet.core.primitives.Chain.Aptos.asset().id,
amount = BigInteger.TEN.pow(com.wallet.core.primitives.Chain.Aptos.asset().decimals),
input = ConfirmParams.TransferParams.Native(
assetId = Chain.Aptos.asset().id,
amount = BigInteger.TEN.pow(Chain.Aptos.asset().decimals),
destination = DestinationAddress("0x82111f2975a0f6080d178236369b7479f6aed1203ef4a23f8205e4b91716b783"),
from = Account(chain = Chain.Aptos, "0x9b1DB81180c31B1b428572Be105E209b5A6222b7", "", ""),
),
owner = "0x9b1DB81180c31B1b428572Be105E209b5A6222b7",
finalAmount = BigInteger.TEN.pow(com.wallet.core.primitives.Chain.Aptos.asset().decimals),
info = AptosSignerPreloader.Info(
finalAmount = BigInteger.TEN.pow(Chain.Aptos.asset().decimals),
chainData = AptosSignerPreloader.AptosChainData(
sequence = 1L,
fee = GasFee(
speed = TxSpeed.Normal,
maxGasPrice = BigInteger.TEN,
limit = BigInteger("21000"),
minerFee = BigInteger.TEN,
relay = BigInteger.TEN,
feeAssetId = com.wallet.core.primitives.Chain.Aptos.asset().id,
feeAssetId = Chain.Aptos.asset().id,
)
)
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.gemwallet.android.model.DestinationAddress
import com.gemwallet.android.model.GasFee
import com.gemwallet.android.model.SignerParams
import com.gemwallet.android.model.TxSpeed
import com.wallet.core.primitives.Account
import com.wallet.core.primitives.Chain
import kotlinx.coroutines.runBlocking
import org.junit.Assert
Expand All @@ -32,14 +33,14 @@ class TestCosmosSign {
val sign = runBlocking {
signClient.signTransfer(
params = SignerParams(
input = ConfirmParams.TransferParams(
assetId = com.wallet.core.primitives.Chain.Cosmos.asset().id,
input = ConfirmParams.TransferParams.Native(
assetId = Chain.Cosmos.asset().id,
amount = BigInteger.TEN.pow(com.wallet.core.primitives.Chain.Cosmos.asset().decimals),
destination = DestinationAddress("cosmos1kglemumu8mn658j6g4z9jzn3zef2qdyyydv7tr"),
from = Account(chain = Chain.Cosmos, address = "cosmos1kglemumu8mn658j6g4z9jzn3zef2qdyyydv7tr", "", "")
),
owner = "cosmos1kglemumu8mn658j6g4z9jzn3zef2qdyyydv7tr",
finalAmount = BigInteger.TEN.pow(com.wallet.core.primitives.Chain.Cosmos.asset().decimals),
info = CosmosSignerPreloader.Info(
chainData = CosmosSignerPreloader.CosmosChainData(
chainId = "",
accountNumber = 1L,
sequence = 1L,
Expand Down
116 changes: 0 additions & 116 deletions app/src/androidTest/java/wallet/android/app/signers/TestEthSign.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.gemwallet.android.model.DestinationAddress
import com.gemwallet.android.model.GasFee
import com.gemwallet.android.model.SignerParams
import com.gemwallet.android.model.TxSpeed
import com.wallet.core.primitives.Account
import com.wallet.core.primitives.Asset
import com.wallet.core.primitives.AssetId
import com.wallet.core.primitives.Chain
Expand Down Expand Up @@ -40,14 +41,14 @@ class TestSolanaSign {
val sign = runBlocking {
signClient.signTransfer(
params = SignerParams(
input = ConfirmParams.TransferParams(
input = ConfirmParams.TransferParams.Token(
assetId = Chain.Solana.asset().id,
amount = BigInteger.TEN.pow(Chain.Solana.asset().decimals),
from = Account(chain = Chain.Solana, address = "4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S", "", null),
destination = DestinationAddress("4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S"),
),
owner = "4Yu2e1Wz5T1Ci2hAPswDqvMgSnJ1Ftw7ZZh8x7xKLx7S",
finalAmount = BigInteger.TEN.pow(Chain.Solana.asset().decimals),
info = SolanaSignerPreloader.Info(
chainData = SolanaSignerPreloader.SolanaChainData(
blockhash = "DzfXchZJoLMG3cNftcf2sw7qatkkuwQf4xH15N5wkKAb",
senderTokenAddress = "",
recipientTokenAddress = null,
Expand Down
28 changes: 19 additions & 9 deletions app/src/main/java/com/gemwallet/android/di/DataModule.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.gemwallet.android.di

import com.gemwallet.android.blockchain.RpcClientAdapter
import com.gemwallet.android.blockchain.clients.ApprovalTransactionPreloader
import com.gemwallet.android.blockchain.clients.BroadcastClientProxy
import com.gemwallet.android.blockchain.clients.NodeStatusClientProxy
import com.gemwallet.android.blockchain.clients.SignClientProxy
import com.gemwallet.android.blockchain.clients.SignerPreload
import com.gemwallet.android.blockchain.clients.SignerPreloaderProxy
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.aptos.AptosBroadcastClient
import com.gemwallet.android.blockchain.clients.aptos.AptosNodeStatusClient
import com.gemwallet.android.blockchain.clients.aptos.AptosSignClient
Expand Down Expand Up @@ -92,22 +95,29 @@ object DataModule {
@Singleton
fun provideSignerPreloader(
rpcClients: RpcClientAdapter,
): SignerPreload = SignerPreloaderProxy(
Chain.available().map {
): SignerPreloaderProxy {
val preloaders = Chain.available().map {
when (it.toChainType()) {
ChainType.Bitcoin -> BitcoinSignerPreloader(it, rpcClients.getClient(it))
ChainType.Ethereum -> EvmSignerPreloader(it, rpcClients.getClient(it))
ChainType.Solana -> SolanaSignerPreloader(it, rpcClients.getClient(Chain.Solana))
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(Chain.Tron))
ChainType.Aptos -> AptosSignerPreloader(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))
}
},
)
}
return SignerPreloaderProxy(
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 },
)
}

@Provides
@Singleton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ class AmountViewModel @Inject constructor(
val memo = params.memo
inputErrorState.update { AmountError.None }
nextErrorState.update { AmountError.None }
val builder = ConfirmParams.Builder(asset.id, amount.atomicValue)
val builder = ConfirmParams.Builder(asset.id, state.assetInfo.owner, amount.atomicValue)
val nextParams = when (params.txType) {
TransactionType.Transfer -> builder.transfer(
destination = destination!!,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,7 @@ private fun Success(
},
actions = {
IconButton(
onClick = {
onPriceAlert(uiState.asset.id)
}
onClick = { onPriceAlert(uiState.asset.id) }
) {
if (priceAlertEnabled) {
Icon(Icons.Default.Notifications, "")
Expand All @@ -157,9 +155,7 @@ private fun Success(
}
}
IconButton(
onClick = {
clipboardManager.setText(AnnotatedString(uiState.account.owner))
}
onClick = { clipboardManager.setText(AnnotatedString(uiState.account.owner)) }
) {
Icon(Icons.Default.ContentCopy, "")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ fun RequestScene(
)
is RequestSceneState.SendTransaction -> {
ConfirmScreen(
params = ConfirmParams.TransferParams(
assetId = AssetId((sceneState as RequestSceneState.SendTransaction).chain),
params = ConfirmParams.TransferParams.Native(
from = (sceneState as RequestSceneState.SendTransaction).account,
assetId = AssetId((sceneState as RequestSceneState.SendTransaction).account.chain),
amount = (sceneState as RequestSceneState.SendTransaction).value,
destination = DestinationAddress(address = (sceneState as RequestSceneState.SendTransaction).to),
memo = (sceneState as RequestSceneState.SendTransaction).data,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@ import com.gemwallet.android.blockchain.operators.LoadPrivateKeyOperator
import com.gemwallet.android.blockchain.operators.PasswordStore
import com.gemwallet.android.data.repositoreis.bridge.findByNamespace
import com.gemwallet.android.data.repositoreis.session.SessionRepository
import com.gemwallet.android.ext.getAccount
import com.gemwallet.android.features.bridge.model.PeerUI
import com.gemwallet.android.math.decodeHex
import com.gemwallet.android.math.hexToBigInteger
import com.gemwallet.android.math.toHexString
import com.reown.walletkit.client.Wallet
import com.reown.walletkit.client.WalletKit
import com.wallet.core.primitives.Account
import com.wallet.core.primitives.Chain
import com.wallet.core.primitives.WalletConnectionMethods
import dagger.hilt.android.lifecycle.HiltViewModel
Expand Down Expand Up @@ -176,11 +178,13 @@ private data class RequestViewModelState(
if (sessionRequest == null) {
return RequestSceneState.Loading
}
val account = wallet?.getAccount(chain!!)!!
return when (sessionRequest.request.method) {
WalletConnectionMethods.eth_sign.string,
WalletConnectionMethods.personal_sign.string,
WalletConnectionMethods.eth_sign_typed_data_v4.string,
WalletConnectionMethods.eth_sign_typed_data.string -> RequestSceneState.SignMessage(
account = account,
walletName = wallet?.name ?: "",
peer = PeerUI(
peerName = sessionRequest.peerMetaData?.name ?: "",
Expand All @@ -198,7 +202,7 @@ private data class RequestViewModelState(
val value = jObj.optString("value", "0x0").hexToBigInteger() ?: BigInteger.ZERO
val data = jObj.getString("data")
RequestSceneState.SendTransaction(
chain = chain!!,
account = account,
to = to,
value = value,
data = data,
Expand All @@ -222,12 +226,13 @@ sealed interface RequestSceneState {

class SignMessage(
val walletName: String,
val account: Account,
val peer: PeerUI,
val params: String,
) : RequestSceneState

class SendTransaction(
val chain: Chain,
val account: Account,
val to: String,
val value: BigInteger,
val data: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sealed class ConfirmError(message: String) : Exception(message){

class Init(message: String) : ConfirmError(message)

data object CalculateFee : ConfirmError("Calculate fee error")
class PreloadError(message: String) : ConfirmError(message)

data object TransactionIncorrect : ConfirmError("Transaction data incorrect")

Expand Down
Loading
Loading