Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit 10366ac

Browse files
committed
Add minimum amount on swap. Integrate tron to walletconnect.
1 parent 4d06e45 commit 10366ac

30 files changed

Lines changed: 255 additions & 74 deletions

File tree

app/src/main/assets/swap/okx.svg

Lines changed: 8 additions & 0 deletions
Loading

app/src/main/kotlin/com/gemwallet/android/MainViewModel.kt

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -123,32 +123,21 @@ class MainViewModel @Inject constructor(
123123
}
124124

125125

126-
suspend fun onWallet(walletIndex: Int, walletId: String) {
126+
suspend fun onWallet(walletId: String) {
127127
walletId.takeIf { it.isNotEmpty() }?.let { walletId ->
128128
if (sessionRepository.session().firstOrNull()?.wallet?.id != walletId) {
129129
walletsRepository.getAll().firstOrNull()?.firstOrNull { it.id == walletId }?.let {
130130
sessionRepository.setWallet(it)
131131
}
132132
}
133133
}
134-
walletIndex.takeIf { it > 0 }?.let { walletIndex -> // TODO: WalletID Migration remove when back will ready
135-
if (sessionRepository.session().firstOrNull()?.wallet?.index != walletIndex) {
136-
walletsRepository.getAll().firstOrNull()?.firstOrNull { it.index == walletIndex }?.let {
137-
sessionRepository.setWallet(it)
138-
}
139-
}
140-
}
141134
}
142135

143136
fun handleIntent(intent: Intent) = viewModelScope.launch(Dispatchers.IO) {
144137
// Handle push notification if app in background or unloaded
145138
val intent = if (intent.hasExtra("walletId")) {
146139
val walletId = intent.getStringExtra("walletId") ?: ""
147-
onWallet(-1, walletId)
148-
intent
149-
} else if (intent.hasExtra("walletIndex")) { // TODO: WalletID Migration remove when back will ready
150-
val walletIndex = intent.getIntExtra("walletIndex", -1)
151-
onWallet(walletIndex, "")
140+
onWallet(walletId)
152141
intent
153142
} else if (intent.extras != null) {
154143
val data = parseNotificationData(
@@ -166,7 +155,7 @@ class MainViewModel @Inject constructor(
166155
}
167156

168157
is PushNotificationData.Transaction -> {
169-
onWallet(data.walletIndex, data.walletId)
158+
onWallet(data.walletId)
170159
Intent().apply {
171160
setData("${assetRouteUri}/${data.assetId}".toUri())
172161
}

app/src/main/kotlin/com/gemwallet/android/services/ShowSystemNotification.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class ShowSystemNotification @Inject constructor(@ApplicationContext val applica
4848
data: PushNotificationData.Transaction
4949
) {
5050
val extra = Bundle().apply {
51-
putInt("walletIndex", data.walletIndex)
51+
putString("walletId", data.walletId)
5252
}
5353
showNotification(title, subtitle, channelId, extra, "${assetRouteUri}/${data.assetId}".toUri())
5454
}

blockchain/src/main/kotlin/com/gemwallet/android/blockchain/clients/tron/TronChainData.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.gemwallet.android.blockchain.clients.tron
22

33
import com.gemwallet.android.model.ChainSignData
4+
import uniffi.gemstone.GemResource
45
import uniffi.gemstone.GemTransactionLoadMetadata
6+
import uniffi.gemstone.TronStakeData
57

68
data class TronChainData(
79
val blockNumber: ULong,
@@ -10,7 +12,7 @@ data class TronChainData(
1012
val witnessAddress: String,
1113
val parentHash: String,
1214
val blockTimestamp: ULong,
13-
val votes: Map<String, ULong> = emptyMap()
15+
val tronStakeData: TronStakeData,
1416
) : ChainSignData
1517

1618
fun GemTransactionLoadMetadata.Tron.toChainData(): TronChainData {
@@ -21,6 +23,6 @@ fun GemTransactionLoadMetadata.Tron.toChainData(): TronChainData {
2123
txTrieRoot = transactionTreeRoot,
2224
witnessAddress = witnessAddress,
2325
parentHash = parentHash,
24-
votes = votes
26+
tronStakeData = stakeData,
2527
)
2628
}

blockchain/src/main/kotlin/com/gemwallet/android/blockchain/clients/tron/TronSignClient.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.gemwallet.android.model.GasFee
1111
import com.google.protobuf.ByteString
1212
import com.wallet.core.primitives.AssetSubtype
1313
import com.wallet.core.primitives.Chain
14+
import uniffi.gemstone.TronStakeData
1415
import wallet.core.java.AnySigner
1516
import wallet.core.jni.CoinType
1617
import wallet.core.jni.proto.Tron
@@ -100,7 +101,8 @@ class TronSignClient(
100101
privateKey: ByteArray
101102
): List<ByteArray> {
102103
val chainData = chainData as TronChainData
103-
val voteContract = createVoteContract(chainData, params.from.address)
104+
val votes = (chainData.tronStakeData as? TronStakeData.Votes)?.v1 ?: throw IllegalArgumentException()
105+
val voteContract = createVoteContract(votes, params.from.address)
104106
return listOf(
105107
sign(chainData, voteContract, fee, privateKey),
106108
)
@@ -114,9 +116,9 @@ class TronSignClient(
114116
privateKey: ByteArray
115117
): List<ByteArray> {
116118
val chainData = chainData as TronChainData
117-
val votes = chainData.votes
119+
val votes = (chainData.tronStakeData as? TronStakeData.Votes)?.v1 ?: throw IllegalArgumentException()
118120
return listOfNotNull(
119-
if (votes.isEmpty()) null else createVoteContract(chainData, params.from.address),
121+
if (votes.isEmpty()) null else createVoteContract(votes,params.from.address),
120122
)
121123
.map {
122124
sign(chainData, it, fee, privateKey)
@@ -131,7 +133,8 @@ class TronSignClient(
131133
privateKey: ByteArray
132134
): List<ByteArray> {
133135
val chainData = chainData as TronChainData
134-
val voteContract = createVoteContract(chainData, params.from.address)
136+
val votes = (chainData.tronStakeData as? TronStakeData.Votes)?.v1 ?: throw IllegalArgumentException()
137+
val voteContract = createVoteContract(votes, params.from.address)
135138
return listOf(sign(chainData, voteContract, fee, privateKey))
136139
}
137140

@@ -232,14 +235,14 @@ class TronSignClient(
232235
return signTransfer(chainData, contract, memo, null, privateKey)
233236
}
234237

235-
private fun createVoteContract(chainData: TronChainData, owner: String) = Tron.VoteWitnessContract.newBuilder().apply {
238+
private fun createVoteContract(votes: List<uniffi.gemstone.TronVote>, owner: String) = Tron.VoteWitnessContract.newBuilder().apply {
236239
this.ownerAddress = owner
237240
this.support = true
238241
this.addAllVotes(
239-
chainData.votes.map {
242+
votes.map {
240243
Tron.VoteWitnessContract.Vote.newBuilder().apply {
241-
this.voteAddress = it.key
242-
this.voteCount = it.value.toLong()
244+
this.voteAddress = it.validator
245+
this.voteCount = it.count.toLong()
243246
}.build()
244247
}
245248
)

blockchain/src/main/kotlin/com/gemwallet/android/blockchain/services/PerpetualService.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class PerpetualService(
4747

4848
suspend fun getCandleSticks(chain: Chain = Chain.HyperCore, symbol: String, period: ChartPeriod): List<ChartCandleStick> {
4949
val response = try {
50-
gateway.getCandlesticks(chain.string, symbol, period.string)
50+
gateway.getPerpetualCandlesticks(chain.string, symbol, period.string)
5151
} catch (_: Throwable) {
5252
return emptyList()
5353
}
@@ -140,7 +140,6 @@ fun GemChartCandleStick.toDTO(): ChartCandleStick {
140140
low = low,
141141
close = close,
142142
volume = volume,
143-
interval = "" // TODO: In
144143
)
145144
}
146145

core

Submodule core updated 462 files

data/repositories/src/main/kotlin/com/gemwallet/android/data/repositoreis/bridge/BridgesRepository.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,11 @@ class BridgesRepository(
222222
sessionProposal = sessionProposal,
223223
supportedNamespaces = supportedNamespaces
224224
)
225-
val approveProposal = Wallet.Params.SessionApprove(proposerPublicKey = sessionProposal.proposerPublicKey, namespaces = sessionNamespaces)
225+
val approveProposal = Wallet.Params.SessionApprove(
226+
proposerPublicKey = sessionProposal.proposerPublicKey,
227+
namespaces = sessionNamespaces,
228+
properties = proposal.properties ?: emptyMap(),
229+
)
226230

227231
WalletKit.approveSession(
228232
params = approveProposal,

data/repositories/src/main/kotlin/com/gemwallet/android/data/repositoreis/bridge/Namespace.kt

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,21 @@ enum class ChainNamespace(val string: String, val methods: List<WalletConnection
3636
WalletConnectionMethods.SuiSignTransaction,
3737
WalletConnectionMethods.SuiSignAndExecuteTransaction,
3838
)
39+
),
40+
Ton(
41+
Chain.Ton.string,
42+
listOf(
43+
WalletConnectionMethods.TonSendMessage,
44+
WalletConnectionMethods.TonSignData,
45+
)
46+
),
47+
Tron(
48+
Chain.Tron.string,
49+
listOf(
50+
WalletConnectionMethods.TronSignMessage,
51+
WalletConnectionMethods.TronSignTransaction,
52+
WalletConnectionMethods.TronSendTransaction,
53+
)
3954
)
4055
}
4156

@@ -48,7 +63,9 @@ fun Chain.getNameSpace(): ChainNamespace? {
4863
ChainType.Ethereum -> ChainNamespace.Eip155
4964
ChainType.Solana -> ChainNamespace.Solana
5065
ChainType.Sui -> ChainNamespace.Sui
51-
else -> return null
66+
ChainType.Ton -> ChainNamespace.Ton
67+
ChainType.Tron -> ChainNamespace.Tron
68+
else -> null
5269
}
5370
}
5471

@@ -59,7 +76,7 @@ fun Chain.getReference(): String? {
5976
fun Chain.Companion.getNamespace(walletConnectChainId: String?): Chain? { // TODO: Use Reown call for parse
6077
val chainId = walletConnectChainId?.split(":")
6178
return if (!chainId.isNullOrEmpty() && chainId.size >= 2) {
62-
return WalletConnect().getChain(chainId[0], chainId[1])?.toChain()
79+
WalletConnect().getChain(chainId[0], chainId[1])?.toChain()
6380
} else {
6481
null
6582
}

data/repositories/src/main/kotlin/com/gemwallet/android/data/repositoreis/perpetual/FakePerpetualRepository.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,6 @@ class FakePerpetualRepository @Inject constructor() : PerpetualRepository {
538538
low = basePrice + variance - 200.0,
539539
close = basePrice + variance + 100.0,
540540
volume = 500000000.0 + (index * 10000000.0),
541-
interval = "1h",
542541
)
543542
}
544543

@@ -552,7 +551,6 @@ class FakePerpetualRepository @Inject constructor() : PerpetualRepository {
552551
low = basePrice + variance - 10.0,
553552
close = basePrice + variance + 5.0,
554553
volume = 300000000.0 + (index * 5000000.0),
555-
interval = "1h",
556554
)
557555
}
558556

@@ -566,7 +564,6 @@ class FakePerpetualRepository @Inject constructor() : PerpetualRepository {
566564
low = basePrice + variance - 1.0,
567565
close = basePrice + variance + 0.5,
568566
volume = 100000000.0 + (index * 2000000.0),
569-
interval = "1h",
570567
)
571568
}
572569

0 commit comments

Comments
 (0)