-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathverify-review-eip712.ts
More file actions
44 lines (38 loc) · 1.11 KB
/
verify-review-eip712.ts
File metadata and controls
44 lines (38 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import type { HumanFullReview, NetworkT } from "@packages/schema"
import {
EIP712_HUMAN_REVIEW_TYPES,
EIP712_PRIMARY_TYPE,
getEip712Domain,
parseThreadId,
} from "@packages/utils"
import "server-only"
import { verifyTypedData } from "viem"
type Params = {
threadId: string
network: NetworkT
review: HumanFullReview
signature: `0x${string}` // The hex signature from the wallet
}
export const verifyRewiewEip712 = async (params: Params): Promise<boolean> => {
const { threadId, network, review, signature } = params
const bioverifyDomain = getEip712Domain(network)
const { publicationId, rootCid } = parseThreadId(threadId)
if (!publicationId || !rootCid) {
throw new Error(`Malformed threadId for Eip712 verification: ${threadId}`)
}
const isValid = await verifyTypedData({
domain: bioverifyDomain,
types: EIP712_HUMAN_REVIEW_TYPES,
primaryType: EIP712_PRIMARY_TYPE,
address: review.address as `0x${string}`,
message: {
reviewer: review.address as `0x${string}`,
decision: review.verdict.decision,
reason: review.verdict.reason,
publicationId,
rootCid,
},
signature,
})
return isValid
}