-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate-sig.ts
70 lines (60 loc) · 1.52 KB
/
generate-sig.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
67
68
69
70
import {
createPublicClient,
createWalletClient,
http,
parseAbiItem,
hashTypedData,
} from "viem";
import { mnemonicToAccount } from "viem/accounts";
import {
ID_REGISTRY_ADDRESS,
idRegistryABI,
ID_REGISTRY_EIP_712_TYPES,
} from "@farcaster/hub-web";
import { optimism } from "viem/chains";
import * as dotenv from "dotenv";
dotenv.config();
const main = async () => {
const publicClient = createPublicClient({
chain: optimism,
transport: http(),
});
const walletClient = createWalletClient({
chain: optimism,
transport: http(),
});
const account = mnemonicToAccount(process.env.MNEMONIC as `0x${string}`);
const now = Math.floor(Date.now() / 1000);
const oneHour = 60 * 60 * 12;
const deadline = now + oneHour;
const nonce = await publicClient.readContract({
address: ID_REGISTRY_ADDRESS,
abi: idRegistryABI,
functionName: "nonces",
args: [account.address],
});
const hash = hashTypedData({
...ID_REGISTRY_EIP_712_TYPES,
primaryType: "Transfer",
message: {
fid: BigInt(process.env.FID as string),
to: account.address,
nonce,
deadline: BigInt(deadline),
},
});
const signature = await walletClient.signTypedData({
account,
...ID_REGISTRY_EIP_712_TYPES,
primaryType: "Transfer",
message: {
fid: BigInt(process.env.FID as string),
to: account.address,
nonce,
deadline: BigInt(deadline),
},
});
console.log("deadline:\n", deadline);
console.log("signature:\n", signature);
};
main();