Skip to content

Commit 6ece2e4

Browse files
committed
feat: validate typedData via viem lib
1 parent e4876f9 commit 6ece2e4

File tree

3 files changed

+50
-29
lines changed

3 files changed

+50
-29
lines changed

package-lock.json

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

packages/providers/ethereum-mpc-provider/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"@web3auth/base": "^9.5.2",
2727
"@web3auth/base-provider": "^9.5.2",
2828
"@web3auth/ethereum-provider": "^9.5.2",
29-
"ethers": "^6.13.4"
29+
"ethers": "^6.13.4",
30+
"viem": "^2.22.5"
3031
},
3132
"peerDependencies": {
3233
"@babel/runtime": "7.x"

packages/providers/ethereum-mpc-provider/src/providers/signingProviders/signingUtils.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import { log } from "@web3auth/base";
55
import {
66
IProviderHandlers,
77
MessageParams,
8-
SignTypedDataMessageV4,
98
SignTypedDataVersion,
109
TransactionFormatter,
1110
TransactionParams,
1211
TypedMessageParams,
1312
validateTypedSignMessageDataV4,
1413
} from "@web3auth/ethereum-provider";
15-
import { hashMessage, Signature, TypedDataEncoder } from "ethers";
14+
import { hashMessage, Signature } from "ethers";
15+
import { hashTypedData, hexToBytes, validateTypedData } from "viem";
1616

1717
async function signTx(
1818
txParams: TransactionParams & { gas?: string },
@@ -89,9 +89,10 @@ async function signTypedData(
8989
if (data === null || data === undefined) {
9090
throw new Error("Missing data parameter");
9191
}
92-
const message: SignTypedDataMessageV4 = typeof data === "string" ? JSON.parse(data) : data;
92+
const message = typeof data === "string" ? JSON.parse(data) : data;
93+
validateTypedData(message);
9394

94-
const { v, r, s } = await sign(Buffer.from(TypedDataEncoder.hash(message.domain, message.types, message.message).slice(2), "hex"));
95+
const { v, r, s } = await sign(Buffer.from(hexToBytes(hashTypedData(message))));
9596

9697
let modifiedV = v;
9798
if (modifiedV <= 1) {
@@ -170,7 +171,6 @@ export function getProviderHandlers({
170171
const chainId = await providerEngineProxy.request<unknown, string>({ method: "eth_chainId" });
171172
await validateTypedSignMessageDataV4(msgParams, chainId);
172173
const data = typeof msgParams.data === "string" ? JSON.parse(msgParams.data) : msgParams.data;
173-
if (data.types.EIP712Domain) delete data.types.EIP712Domain;
174174
const sig = signTypedData(sign, data, SignTypedDataVersion.V4);
175175
return sig;
176176
},

0 commit comments

Comments
 (0)