Skip to content

Commit 1cb89b4

Browse files
committed
Fix wallet connect sign
1 parent a76e65e commit 1cb89b4

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

app/src/main/java/com/gemwallet/android/features/bridge/request/RequestViewModel.kt

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class RequestViewModel @Inject constructor(
4949
val data = JSONArray(request.request.params).getString(1)
5050
String(data.decodeHex())
5151
}
52+
WalletConnectionMethods.eth_sign_typed_data_v4.string,
5253
WalletConnectionMethods.eth_sign_typed_data.string -> {
5354
JSONArray(request.request.params).getString(1)
5455
}
@@ -92,23 +93,30 @@ class RequestViewModel @Inject constructor(
9293
viewModelScope.launch(Dispatchers.IO) {
9394
val method = WalletConnectionMethods.entries
9495
.firstOrNull { it.string == sessionRequest.request.method }
95-
val param = when (method) {
96-
WalletConnectionMethods.eth_sign,
97-
WalletConnectionMethods.personal_sign -> {
98-
val data = state.value.params.toByteArray()
99-
val messagePrefix = "\u0019Ethereum Signed Message:\n${data.size}"
100-
val prefix = messagePrefix.toByteArray()
101-
Hash.keccak256(prefix + data)
102-
}
103-
WalletConnectionMethods.eth_sign_typed_data -> EthereumAbi.encodeTyped(state.value.params)
104-
WalletConnectionMethods.solana_sign_message -> state.value.params.toByteArray()
105-
else -> return@launch
106-
}
107-
10896
val password = passwordStore.getPassword(session.wallet.id)
10997
val privateKey = loadPrivateKeyOperator(session.wallet, chain, password)
98+
11099
val sign = try {
111-
signClient.signMessage(chain, param, privateKey)
100+
when (method) {
101+
WalletConnectionMethods.eth_sign,
102+
WalletConnectionMethods.personal_sign -> {
103+
val data = state.value.params.toByteArray()
104+
val messagePrefix = "\u0019Ethereum Signed Message:\n${data.size}"
105+
val prefix = messagePrefix.toByteArray()
106+
val param = Hash.keccak256(prefix + data)
107+
signClient.signMessage(chain, param, privateKey)
108+
}
109+
WalletConnectionMethods.eth_sign_typed_data,
110+
WalletConnectionMethods.eth_sign_typed_data_v4 -> {
111+
val param = EthereumAbi.encodeTyped(state.value.params)
112+
signClient.signTypedMessage(chain, param, privateKey)
113+
}
114+
WalletConnectionMethods.solana_sign_message -> {
115+
val param = state.value.params.toByteArray()
116+
signClient.signMessage(chain, param, privateKey)
117+
}
118+
else -> return@launch
119+
}
112120
} catch (err: Throwable) {
113121
state.update { it.copy(error = err.message ?: "Sign error") }
114122
return@launch
@@ -171,6 +179,7 @@ private data class RequestViewModelState(
171179
return when (sessionRequest.request.method) {
172180
WalletConnectionMethods.eth_sign.string,
173181
WalletConnectionMethods.personal_sign.string,
182+
WalletConnectionMethods.eth_sign_typed_data_v4.string,
174183
WalletConnectionMethods.eth_sign_typed_data.string -> RequestSceneState.SignMessage(
175184
walletName = wallet?.name ?: "",
176185
peer = PeerUI(

0 commit comments

Comments
 (0)