创建地址验证
要创建证明外部以太坊地址所有权的验证,可以使用 Eip712Signer
签署验证消息,并使用 makeVerificationAddEthAddress
函数构建发送至 Hub 的消息。
首先,设置客户端和账户密钥:
ts
import {
NobleEd25519Signer,
ViemLocalEip712Signer,
FarcasterNetwork,
makeVerificationAddEthAddress,
} from '@farcaster/hub-nodejs';
import { createPublicClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { optimism } from 'viem/chains';
const publicClient = createPublicClient({
chain: optimism,
transport: http(),
});
const alice = privateKeyToAccount('0xab..12');
const eip712Signer = new ViemLocalEip712Signer(alice);
const ed25519Signer = new NobleEd25519Signer('0xcd..34');
然后使用 Eip712Signer
创建验证签名。需要查询 OP 主网上的最新区块哈希并将其包含在签名消息中。
ts
const latestBlock = await publicClient.getBlock();
const fid = 1n;
const network = FarcasterNetwork.MAINNET;
const address = alice.address;
const blockHash = latestBlock.blockhash;
const ethSignature = eip712Signer.signVerificationEthAddressClaim({
fid,
address,
network,
blockHash,
});
最后,使用 makeVerificationAddEthAddress
构建可发送至 Hub 的验证
消息。
ts
if (ethSignature.isOk()) {
const message = await makeVerificationAddEthAddress(
{
address,
blockHash,
ethSignature,
},
{ fid, network },
ed25519Signer
);
}
完整代码示例
ts
import {
NobleEd25519Signer,
ViemLocalEip712Signer,
FarcasterNetwork,
makeVerificationAddEthAddress,
} from '@farcaster/hub-nodejs';
import { createPublicClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { optimism } from 'viem/chains';
const publicClient = createPublicClient({
chain: optimism,
transport: http(),
});
const alice = privateKeyToAccount('0xab..12');
const eip712Signer = new ViemLocalEip712Signer(alice);
const ed25519Signer = new NobleEd25519Signer('0xcd..34');
const latestBlock = await publicClient.getBlock();
const fid = 1n;
const network = FarcasterNetwork.MAINNET;
const address = alice.address;
const blockHash = latestBlock.blockhash;
const ethSignature = eip712Signer.signVerificationEthAddressClaim({
fid,
address,
network,
blockHash,
});
if (ethSignature.isOk()) {
const message = await makeVerificationAddEthAddress(
{
address,
blockHash,
ethSignature,
},
{ fid, network },
ed25519Signer
);
}