// generate-required-parameters.js --> Filename
const {
ID_REGISTRY_ADDRESS,
ViemLocalEip712Signer,
idRegistryABI,
} = require('@farcaster/hub-nodejs');
const { bytesToHex, createPublicClient, http } = require('viem');
const { mnemonicToAccount } = require('viem/accounts');
const { optimism } = require('viem/chains');
const publicClient = createPublicClient({
chain: optimism,
transport: http(),
});
const FID = 'FID_TO_COLLECT_SIGNATURE_FOR'; // fid returned from GET - /v2/farcaster/user/fid
const MNEMONIC = 'NEW_ACCOUNT_MNEMONIC';
const getDeadline = () => {
const now = Math.floor(Date.now() / 1000);
const oneHour = 60 * 60;
return BigInt(now + oneHour);
};
(async () => {
const deadline = getDeadline();
console.log('\ndeadline: ', parseInt(deadline));
const requestedUserAccount = mnemonicToAccount(MNEMONIC);
const requestedUserAccountSigner = new ViemLocalEip712Signer(
requestedUserAccount
);
console.log(
'\nrequested_user_custody_address: ',
requestedUserAccount.address
);
let requestedUserNonce = await publicClient.readContract({
address: ID_REGISTRY_ADDRESS,
abi: idRegistryABI,
functionName: 'nonces',
args: [requestedUserAccount.address],
});
console.log('\nfid: ', parseInt(FID));
let requestedUserSignature = await requestedUserAccountSigner.signTransfer({
fid: BigInt(FID),
to: requestedUserAccount.address,
nonce: requestedUserNonce,
deadline,
});
console.log(
'\nsignature: ',
bytesToHex(requestedUserSignature.value),
'\n'
);
})();