@@ -25,6 +25,7 @@ const signerMethods = [
25
25
"eth_requestAccounts" ,
26
26
"eth_accounts" ,
27
27
"eth_chainId" ,
28
+ "personal_sign" ,
28
29
"eth_sign" ,
29
30
"eth_signTypedData" ,
30
31
"eth_signTypedData_v4" ,
@@ -131,13 +132,33 @@ export class UnWalletProvider implements Eip1193Provider {
131
132
resolve ( this . accounts ?. chainId as any ) ;
132
133
return ;
133
134
135
+ case "personal_sign" :
136
+ try {
137
+ if ( ! this . isConnected ( ) ) {
138
+ await this . connect ( ) ;
139
+ }
140
+ const params = this . parsePersonalSignParams ( args . params ) ;
141
+ const sig = await this . ethSign ( {
142
+ account : params [ 1 ] ,
143
+ message : params [ 0 ] ,
144
+ } ) ;
145
+ resolve ( sig as any ) ;
146
+ } catch ( e ) {
147
+ reject ( e ) ;
148
+ }
149
+ return ;
150
+
134
151
case "eth_sign" :
135
152
try {
136
153
if ( ! this . isConnected ( ) ) {
137
154
await this . connect ( ) ;
138
155
}
139
156
const params = this . parseEthSignParams ( args . params ) ;
140
- resolve ( ( await this . ethSign ( params [ 1 ] ) ) as any ) ;
157
+ const sig = await this . ethSign ( {
158
+ account : params [ 0 ] ,
159
+ message : params [ 1 ] ,
160
+ } ) ;
161
+ resolve ( sig as any ) ;
141
162
} catch ( e ) {
142
163
reject ( e ) ;
143
164
}
@@ -149,7 +170,11 @@ export class UnWalletProvider implements Eip1193Provider {
149
170
await this . connect ( ) ;
150
171
}
151
172
const params = this . parseEthSignTypedDataParams ( args . params ) ;
152
- resolve ( ( await this . ethSignTypedData ( params [ 1 ] ) ) as any ) ;
173
+ const sig = await this . ethSignTypedData ( {
174
+ account : params [ 0 ] ,
175
+ data : params [ 1 ] ,
176
+ } ) ;
177
+ resolve ( sig as any ) ;
153
178
} catch ( e ) {
154
179
reject ( e ) ;
155
180
}
@@ -161,7 +186,11 @@ export class UnWalletProvider implements Eip1193Provider {
161
186
await this . connect ( ) ;
162
187
}
163
188
const params = this . parseEthSignTypedDataV4Params ( args . params ) ;
164
- resolve ( ( await this . ethSignTypedDataV4 ( params [ 1 ] ) ) as any ) ;
189
+ const sig = await this . ethSignTypedDataV4 ( {
190
+ account : params [ 0 ] ,
191
+ data : params [ 1 ] ,
192
+ } ) ;
193
+ resolve ( sig as any ) ;
165
194
} catch ( e ) {
166
195
reject ( e ) ;
167
196
}
@@ -180,7 +209,8 @@ export class UnWalletProvider implements Eip1193Provider {
180
209
await this . connect ( ) ;
181
210
}
182
211
const params = this . parseEthSendTransactionParams ( args . params ) ;
183
- resolve ( ( await this . ethSendTransaction ( params [ 0 ] ) ) as any ) ;
212
+ const txHash = await this . ethSendTransaction ( params [ 0 ] ) ;
213
+ resolve ( txHash as any ) ;
184
214
} catch ( e ) {
185
215
reject ( e ) ;
186
216
}
@@ -266,32 +296,41 @@ export class UnWalletProvider implements Eip1193Provider {
266
296
} ) ;
267
297
}
268
298
269
- private ethSign ( message : string ) : Promise < string > {
299
+ private ethSign ( args : { account : string ; message : string } ) : Promise < string > {
270
300
return new Promise ( ( resolve , reject ) => {
271
301
this . resolve = resolve ;
272
302
this . reject = reject ;
273
303
this . openSignerWindow ( "/x/eth/sign" , {
274
- message : message ,
304
+ account : args . account ,
305
+ message : args . message ,
275
306
} ) ;
276
307
} ) ;
277
308
}
278
309
279
- private ethSignTypedData ( data : Eip712TypedData ) : Promise < string > {
310
+ private ethSignTypedData ( args : {
311
+ account : string ;
312
+ data : Eip712TypedData ;
313
+ } ) : Promise < string > {
280
314
return new Promise ( ( resolve , reject ) => {
281
315
this . resolve = resolve ;
282
316
this . reject = reject ;
283
317
this . openSignerWindow ( "/x/eth/signTypedData" , {
284
- data : JSON . stringify ( data ) ,
318
+ account : args . account ,
319
+ data : JSON . stringify ( args . data ) ,
285
320
} ) ;
286
321
} ) ;
287
322
}
288
323
289
- private ethSignTypedDataV4 ( data : string ) : Promise < string > {
324
+ private ethSignTypedDataV4 ( args : {
325
+ account : string ;
326
+ data : string ;
327
+ } ) : Promise < string > {
290
328
return new Promise ( ( resolve , reject ) => {
291
329
this . resolve = resolve ;
292
330
this . reject = reject ;
293
331
this . openSignerWindow ( "/x/eth/signTypedData" , {
294
- data : data ,
332
+ account : args . account ,
333
+ data : args . data ,
295
334
} ) ;
296
335
} ) ;
297
336
}
@@ -374,6 +413,25 @@ export class UnWalletProvider implements Eip1193Provider {
374
413
this . eventEmitter . removeListener ( eventType , listener ) ;
375
414
}
376
415
416
+ private parsePersonalSignParams (
417
+ params ?: object | readonly unknown [ ]
418
+ ) : [ string , string ] {
419
+ if ( params === undefined ) {
420
+ throw new Error ( "params undefined" ) ;
421
+ }
422
+ if ( ! Array . isArray ( params ) || params . length !== 2 ) {
423
+ throw new Error ( "invalid params" ) ;
424
+ }
425
+ if ( ! ethers . utils . isHexString ( params [ 0 ] ) ) {
426
+ throw new Error ( "invalid message" ) ;
427
+ }
428
+ if ( ! ethers . utils . isAddress ( params [ 1 ] ) ) {
429
+ throw new Error ( "invalid account" ) ;
430
+ }
431
+
432
+ return [ params [ 0 ] , params [ 1 ] ] ;
433
+ }
434
+
377
435
private parseEthSignParams (
378
436
params ?: object | readonly unknown [ ]
379
437
) : [ string , string ] {
0 commit comments