-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheip712.ts
66 lines (60 loc) · 1.83 KB
/
eip712.ts
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const ethSigUtil = require("eth-sig-util")
import { utils } from "ethers"
const { keccak256, defaultAbiCoder, toUtf8Bytes, solidityPack } = utils
export const EIP712Domain = [
{ name: "name", type: "string" },
{ name: "version", type: "string" },
{ name: "chainId", type: "uint256" },
{ name: "verifyingContract", type: "address" },
]
export function domainSeparator(name, version, chainId, verifyingContract) {
return (
"0x" + ethSigUtil.TypedDataUtils.hashStruct("EIP712Domain", { name, version, chainId, verifyingContract }, { EIP712Domain }).toString("hex")
)
}
export function getEvolutionDataMessage(name, version, chainId, verifyingContract, tokenId, permitHolder, nonce, deadline) {
const message = {
tokenId: tokenId,
permitHolder: permitHolder,
nonce: nonce,
deadline: deadline,
}
return {
types: {
EIP712Domain,
EvolvePermit: [
{ name: "tokenId", type: "uint256" },
{ name: "permitHolder", type: "address" },
{ name: "nonce", type: "uint256" },
{ name: "deadline", type: "uint256" },
],
},
domain: { name, version, chainId, verifyingContract },
primaryType: "EvolvePermit",
message,
}
}
export function getRecruitmentDataMessage(name, version, chainId, verifyingContract, tokenId0, tokenId1, permitHolder, nonce, deadline) {
const message = {
tokenId0,
tokenId1,
permitHolder,
nonce,
deadline,
}
return {
types: {
EIP712Domain,
RecruitPermit: [
{ name: "tokenId0", type: "uint256" },
{ name: "tokenId1", type: "uint256" },
{ name: "permitHolder", type: "address" },
{ name: "nonce", type: "uint256" },
{ name: "deadline", type: "uint256" },
],
},
domain: { name, version, chainId, verifyingContract },
primaryType: "RecruitPermit",
message,
}
}