@@ -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 = " \u0019 Ethereum 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 = " \u0019 Ethereum 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