Skip to content

Commit 6518174

Browse files
authored
Merge pull request #28 from SIVIRA/personal-sign
電子署名処理の調整
2 parents bbf2dee + 7d4e857 commit 6518174

File tree

2 files changed

+98
-40
lines changed

2 files changed

+98
-40
lines changed

package-lock.json

Lines changed: 30 additions & 30 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/provider.ts

Lines changed: 68 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const signerMethods = [
2525
"eth_requestAccounts",
2626
"eth_accounts",
2727
"eth_chainId",
28+
"personal_sign",
2829
"eth_sign",
2930
"eth_signTypedData",
3031
"eth_signTypedData_v4",
@@ -131,13 +132,33 @@ export class UnWalletProvider implements Eip1193Provider {
131132
resolve(this.accounts?.chainId as any);
132133
return;
133134

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+
134151
case "eth_sign":
135152
try {
136153
if (!this.isConnected()) {
137154
await this.connect();
138155
}
139156
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);
141162
} catch (e) {
142163
reject(e);
143164
}
@@ -149,7 +170,11 @@ export class UnWalletProvider implements Eip1193Provider {
149170
await this.connect();
150171
}
151172
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);
153178
} catch (e) {
154179
reject(e);
155180
}
@@ -161,7 +186,11 @@ export class UnWalletProvider implements Eip1193Provider {
161186
await this.connect();
162187
}
163188
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);
165194
} catch (e) {
166195
reject(e);
167196
}
@@ -180,7 +209,8 @@ export class UnWalletProvider implements Eip1193Provider {
180209
await this.connect();
181210
}
182211
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);
184214
} catch (e) {
185215
reject(e);
186216
}
@@ -266,32 +296,41 @@ export class UnWalletProvider implements Eip1193Provider {
266296
});
267297
}
268298

269-
private ethSign(message: string): Promise<string> {
299+
private ethSign(args: { account: string; message: string }): Promise<string> {
270300
return new Promise((resolve, reject) => {
271301
this.resolve = resolve;
272302
this.reject = reject;
273303
this.openSignerWindow("/x/eth/sign", {
274-
message: message,
304+
account: args.account,
305+
message: args.message,
275306
});
276307
});
277308
}
278309

279-
private ethSignTypedData(data: Eip712TypedData): Promise<string> {
310+
private ethSignTypedData(args: {
311+
account: string;
312+
data: Eip712TypedData;
313+
}): Promise<string> {
280314
return new Promise((resolve, reject) => {
281315
this.resolve = resolve;
282316
this.reject = reject;
283317
this.openSignerWindow("/x/eth/signTypedData", {
284-
data: JSON.stringify(data),
318+
account: args.account,
319+
data: JSON.stringify(args.data),
285320
});
286321
});
287322
}
288323

289-
private ethSignTypedDataV4(data: string): Promise<string> {
324+
private ethSignTypedDataV4(args: {
325+
account: string;
326+
data: string;
327+
}): Promise<string> {
290328
return new Promise((resolve, reject) => {
291329
this.resolve = resolve;
292330
this.reject = reject;
293331
this.openSignerWindow("/x/eth/signTypedData", {
294-
data: data,
332+
account: args.account,
333+
data: args.data,
295334
});
296335
});
297336
}
@@ -374,6 +413,25 @@ export class UnWalletProvider implements Eip1193Provider {
374413
this.eventEmitter.removeListener(eventType, listener);
375414
}
376415

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+
377435
private parseEthSignParams(
378436
params?: object | readonly unknown[]
379437
): [string, string] {

0 commit comments

Comments
 (0)