Skip to content

Commit b72b25e

Browse files
committed
fix signatures
1 parent 73fd7f9 commit b72b25e

File tree

5 files changed

+201
-180
lines changed

5 files changed

+201
-180
lines changed

packages/thirdweb/package.json

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -127,24 +127,60 @@
127127
},
128128
"typesVersions": {
129129
"*": {
130-
"adapters/*": ["./dist/types/exports/adapters/*.d.ts"],
131-
"auth": ["./dist/types/exports/auth.d.ts"],
132-
"chains": ["./dist/types/exports/chains.d.ts"],
133-
"contract": ["./dist/types/exports/contract.d.ts"],
134-
"deploys": ["./dist/types/exports/deploys.d.ts"],
135-
"event": ["./dist/types/exports/event.d.ts"],
136-
"extensions/*": ["./dist/types/exports/extensions/*.d.ts"],
137-
"pay": ["./dist/types/exports/pay.d.ts"],
138-
"react": ["./dist/types/exports/react.d.ts"],
139-
"react-native": ["./dist/types/exports/react-native.d.ts"],
140-
"rpc": ["./dist/types/exports/rpc.d.ts"],
141-
"storage": ["./dist/types/exports/storage.d.ts"],
142-
"transaction": ["./dist/types/exports/transaction.d.ts"],
143-
"utils": ["./dist/types/exports/utils.d.ts"],
144-
"wallets": ["./dist/types/exports/wallets.d.ts"],
145-
"wallets/*": ["./dist/types/exports/wallets/*.d.ts"],
146-
"modules": ["./dist/types/exports/modules.d.ts"],
147-
"social": ["./dist/types/exports/social.d.ts"]
130+
"adapters/*": [
131+
"./dist/types/exports/adapters/*.d.ts"
132+
],
133+
"auth": [
134+
"./dist/types/exports/auth.d.ts"
135+
],
136+
"chains": [
137+
"./dist/types/exports/chains.d.ts"
138+
],
139+
"contract": [
140+
"./dist/types/exports/contract.d.ts"
141+
],
142+
"deploys": [
143+
"./dist/types/exports/deploys.d.ts"
144+
],
145+
"event": [
146+
"./dist/types/exports/event.d.ts"
147+
],
148+
"extensions/*": [
149+
"./dist/types/exports/extensions/*.d.ts"
150+
],
151+
"pay": [
152+
"./dist/types/exports/pay.d.ts"
153+
],
154+
"react": [
155+
"./dist/types/exports/react.d.ts"
156+
],
157+
"react-native": [
158+
"./dist/types/exports/react-native.d.ts"
159+
],
160+
"rpc": [
161+
"./dist/types/exports/rpc.d.ts"
162+
],
163+
"storage": [
164+
"./dist/types/exports/storage.d.ts"
165+
],
166+
"transaction": [
167+
"./dist/types/exports/transaction.d.ts"
168+
],
169+
"utils": [
170+
"./dist/types/exports/utils.d.ts"
171+
],
172+
"wallets": [
173+
"./dist/types/exports/wallets.d.ts"
174+
],
175+
"wallets/*": [
176+
"./dist/types/exports/wallets/*.d.ts"
177+
],
178+
"modules": [
179+
"./dist/types/exports/modules.d.ts"
180+
],
181+
"social": [
182+
"./dist/types/exports/social.d.ts"
183+
]
148184
}
149185
},
150186
"browser": {
@@ -181,7 +217,7 @@
181217
"fuse.js": "7.0.0",
182218
"input-otp": "^1.4.1",
183219
"mipd": "0.0.7",
184-
"ox": "0.3.0",
220+
"ox": "0.4.0",
185221
"uqr": "0.1.2",
186222
"viem": "2.21.51"
187223
},

packages/thirdweb/src/utils/signatures/sign-typed-data.test.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -83,21 +83,6 @@ test("domain: chainId", async () => {
8383
);
8484
});
8585

86-
test("domain: chainId hex", async () => {
87-
expect(
88-
signTypedData({
89-
...typedData.complex,
90-
domain: {
91-
chainId: "0x1" as unknown as number,
92-
},
93-
primaryType: "Mail",
94-
privateKey: ANVIL_PKEY_A,
95-
}),
96-
).toMatchInlineSnapshot(
97-
'"0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c"',
98-
);
99-
});
100-
10186
test("domain: name", async () => {
10287
expect(
10388
signTypedData({

packages/thirdweb/src/utils/signatures/signature-to-hex.ts

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import { secp256k1 } from "@noble/curves/secp256k1";
2-
import { type Hex, hexToBigInt } from "../encoding/hex.js";
3-
4-
// We can't migrate this to Ox without breaking changes since Ox does not support pre-EIP1559 signatures
1+
import * as ox__Hex from "ox/Hex";
2+
import * as ox__Signature from "ox/Signature";
3+
import type { Hex } from "../encoding/hex.js";
54

65
/**
76
* Converts a signature to a hex string.
@@ -29,17 +28,28 @@ import { type Hex, hexToBigInt } from "../encoding/hex.js";
2928
export function signatureToHex(signature: {
3029
r: Hex;
3130
s: Hex;
32-
v?: bigint;
33-
yParity?: number;
31+
v?: bigint | number | Hex | undefined;
32+
yParity?: bigint | number | Hex | undefined;
3433
}): Hex {
3534
const { r, s, v, yParity } = signature;
36-
const yParity_ = (() => {
37-
if (yParity === 0 || yParity === 1) return yParity;
38-
if (v && (v === 27n || v === 28n || v >= 35n)) return v % 2n === 0n ? 1 : 0;
39-
throw new Error("Invalid `v` or `yParity` value");
40-
})();
41-
return `0x${new secp256k1.Signature(
42-
hexToBigInt(r),
43-
hexToBigInt(s),
44-
).toCompactHex()}${yParity_ === 0 ? "1b" : "1c"}`;
35+
return ox__Signature.toHex(
36+
ox__Signature.from(
37+
typeof yParity !== "undefined"
38+
? {
39+
r,
40+
s,
41+
yParity: !ox__Hex.validate(yParity)
42+
? ox__Hex.fromNumber(yParity)
43+
: yParity,
44+
}
45+
: {
46+
r,
47+
s,
48+
v:
49+
!ox__Hex.validate(v) && typeof v !== "undefined"
50+
? ox__Hex.fromNumber(v)
51+
: v,
52+
},
53+
),
54+
);
4555
}

packages/thirdweb/src/wallets/wallet-connect/receiver/session-request.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ describe("session_request", () => {
159159
id: REQUEST_EVENT_MOCK.id,
160160
jsonrpc: "2.0",
161161
result:
162-
"0x7b7806017c0666b88ff1a51a2af716b808c4974bdb31a4fb734fe2d16c121766363847d2556eb466d1cd04b26541aa5a2a1f5be4154cfd9bef8137dfb7b711ff01",
162+
"0x7b7806017c0666b88ff1a51a2af716b808c4974bdb31a4fb734fe2d16c121766363847d2556eb466d1cd04b26541aa5a2a1f5be4154cfd9bef8137dfb7b711ff1c",
163163
},
164164
});
165165
});
@@ -239,7 +239,7 @@ describe("session_request", () => {
239239
id: REQUEST_EVENT_MOCK.id,
240240
jsonrpc: "2.0",
241241
result:
242-
"0x7b7806017c0666b88ff1a51a2af716b808c4974bdb31a4fb734fe2d16c121766363847d2556eb466d1cd04b26541aa5a2a1f5be4154cfd9bef8137dfb7b711ff01",
242+
"0x7b7806017c0666b88ff1a51a2af716b808c4974bdb31a4fb734fe2d16c121766363847d2556eb466d1cd04b26541aa5a2a1f5be4154cfd9bef8137dfb7b711ff1c",
243243
},
244244
});
245245
});
@@ -323,7 +323,7 @@ describe("session_request", () => {
323323
id: REQUEST_EVENT_MOCK.id,
324324
jsonrpc: "2.0",
325325
result:
326-
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e59200",
326+
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e5921b",
327327
},
328328
});
329329
});
@@ -347,7 +347,7 @@ describe("session_request", () => {
347347
id: REQUEST_EVENT_MOCK.id,
348348
jsonrpc: "2.0",
349349
result:
350-
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e59200",
350+
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e5921b",
351351
},
352352
});
353353
});
@@ -378,7 +378,7 @@ describe("session_request", () => {
378378
id: REQUEST_EVENT_MOCK.id,
379379
jsonrpc: "2.0",
380380
result:
381-
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e59200",
381+
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e5921b",
382382
},
383383
});
384384
});
@@ -402,7 +402,7 @@ describe("session_request", () => {
402402
id: REQUEST_EVENT_MOCK.id,
403403
jsonrpc: "2.0",
404404
result:
405-
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e59200",
405+
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e5921b",
406406
},
407407
});
408408
});

0 commit comments

Comments
 (0)