名称: farcaster-agent
描述: 自动创建 Farcaster 账户并发布 Cast。来自 Farcaster 团队的官方技能。
元数据: {"openclaw":{"emoji":"🟣","requires":{"bins":["node","npm"],"env":[]},"install":[{"id":"npm","kind":"shell","command":"cd {baseDir}/.. && npm install","label":"安装依赖项"}]}}
来自 Farcaster 团队的官方技能。可自动创建和管理 Farcaster 账户。注册新的 Farcaster 身份(FID),添加签名密钥,设置包含用户名的个人资料,并向网络发布 Cast。
在以下场景中使用此技能:
- 需要从零开始创建 Farcaster 账户
- 想要向 Farcaster 发布 Cast(消息)
- 需要设置包含用户名、简介和个人头像的个人资料
- 希望在 Farcaster 社交网络上建立自动化存在
您需要在任何主流链(以太坊、Optimism、Base、Arbitrum 或 Polygon)上拥有大约 1 美元的 ETH 或 USDC。本技能会自动处理跨链桥接和代币兑换。
如果您没有已注资的钱包,请先创建一个:
const { Wallet } = require('ethers');
const wallet = Wallet.createRandom();
console.log('地址:', wallet.address);
console.log('私钥:', wallet.privateKey);
向您的操作员请求: “我已创建一个钱包。请向 <地址> 发送约 1 美元的 ETH 或 USDC,支持以下任一链:以太坊、Optimism、Base、Arbitrum 或 Polygon。完成后请通知我。”
请安全保存私钥 —— 后续所有步骤都需要它。
资金到位后,运行完整设置:
cd {baseDir}/..
PRIVATE_KEY=0x... node src/auto-setup.js "您的第一条 Cast 内容"
此命令将:
1. 检测哪个链上有资金(ETH 或 USDC)
2. 通过桥接/兑换,在 Optimism 上获取 ETH,在 Base 上获取 USDC
3. 注册您的 FID(Farcaster ID)
4. 添加签名者密钥
5. 等待 Hub 同步
6. 发布您的第一条 Cast
7. 自动将凭证保存到持久化存储
凭证会自动保存到:
- ~/.openclaw/farcaster-credentials.json(如果已安装 OpenClaw)
- ./credentials.json(备用路径)
安全警告: 凭证以纯文本 JSON 格式存储。任何能访问这些文件的人都可以控制钱包资金和 Farcaster 账户。生产环境中请自行实现安全存储方案。
您可以验证和管理凭证:
cd {baseDir}/..
# 列出所有已存储的账户
node src/credentials.js list
# 获取活跃账户的凭证
node src/credentials.js get
# 显示凭证文件路径
node src/credentials.js path
要禁用自动保存,请使用 --no-save 参数:
PRIVATE_KEY=0x... node src/auto-setup.js "您的 Cast" --no-save
要发布更多 Cast,可以从存储中加载凭证:
const { postCast, loadCredentials } = require('{baseDir}/../src');
// 加载已保存的凭证
const creds = loadCredentials();
const { hash } = await postCast({
privateKey: creds.custodyPrivateKey,
signerPrivateKey: creds.signerPrivateKey,
fid: Number(creds.fid),
text: '您的 Cast 内容'
});
console.log('Cast 链接: https://farcaster.xyz/~/conversations/' + hash);
或者通过 CLI 使用环境变量:
cd {baseDir}/..
PRIVATE_KEY=0x... SIGNER_PRIVATE_KEY=... FID=123 node src/post-cast.js "您的 Cast 内容"
要设置用户名、显示名称、简介和个人头像:
cd {baseDir}/..
PRIVATE_KEY=0x... SIGNER_PRIVATE_KEY=... FID=123 npm run profile myusername "显示名称" "我的简介" "https://example.com/pfp.png"
或者以编程方式:
const { setupFullProfile } = require('{baseDir}/../src');
await setupFullProfile({
privateKey: '0x...',
signerPrivateKey: '...',
fid: 123,
fname: 'myusername',
displayName: '我的显示名称',
bio: '我是一个自主的 AI 智能体。',
pfpUrl: 'https://api.dicebear.com/7.x/bottts/png?seed=myagent'
});
对于头像,可以使用任何可通过 HTTPS 公开访问的图片 URL:
- DiceBear(生成头像):https://api.dicebear.com/7.x/bottts/png?seed=yourname
- IPFS 托管的图片
- 任何公开的图片 URL
| 操作 | 成本 |
|---|---|
| FID 注册 | ~$0.20 |
| 添加签名者 | ~$0.05 |
| 跨链桥接 | ~$0.10-0.20 |
| 每次 API 调用 | $0.001 |
| 最低总计 | ~$0.50 |
建议预算 1 美元,以应对重试和 Gas 费波动。
https://hub-api.neynar.com)| 端点 | 方法 | 描述 |
|---|---|---|
/v1/submitMessage |
POST | 提交 Cast、个人资料更新(需要 x402 支付请求头) |
/v1/onChainIdRegistryEventByAddress?address=<addr> |
GET | 检查地址的 FID 是否已同步 |
/v1/onChainSignersByFid?fid=<fid> |
GET | 检查签名者密钥是否已同步 |
https://api.neynar.com)| 端点 | 方法 | 描述 |
|---|---|---|
/v2/farcaster/cast?identifier=<hash>&type=hash |
GET | 验证 Cast 是否存在于网络中 |
https://fnames.farcaster.xyz)| 端点 | 方法 | 描述 |
|---|---|---|
/transfers |
POST | 注册或转移 fname(需要 EIP-712 签名) |
/transfers/current?name=<fname> |
GET | 检查 fname 可用性(404 = 可用) |
0xA6a8736f18f383f1cc2d938576933E5eA7Df01A1X-PAYMENT,包含 base64 编码的 EIP-3009 transferWithAuthorization 签名原因:库版本过旧。修复:运行 npm install @farcaster/hub-nodejs@latest
原因:Hub 尚未同步您的注册信息。修复:等待 30-60 秒后重试。
原因:元数据编码问题。修复:代码已使用正确的 SignedKeyRequestValidator.encodeMetadata() 方法。
原因:Hub 尚未同步您的 fname 注册信息。修复:等待 30-60 秒(代码会自动处理此问题)。
如果自动设置中途失败,您可以单独运行各个步骤:
cd {baseDir}/..
# 1. 注册 FID(在 Optimism 上)
PRIVATE_KEY=0x... node src/register-fid.js
# 2. 添加签名者密钥(在 Optimism 上)
PRIVATE_KEY=0x... node src/add-signer.js
# 3. 将 ETH 兑换为 USDC(在 Base 上,用于 x402 支付)
PRIVATE_KEY=0x... node src/swap-to-usdc.js
# 4. 发布 Cast
PRIVATE_KEY=0x... SIGNER_PRIVATE_KEY=... FID=123 node src/post-cast.js "你好!"
# 5. 设置个人资料
PRIVATE_KEY=0x... SIGNER_PRIVATE_KEY=... FID=123 npm run profile username "名称" "简介" "头像-url"
所有函数均可导入使用:
const {
// 完整的自主设置
autoSetup,
checkAllBalances,
// 核心功能
registerFid,
addSigner,
postCast,
swapEthToUsdc,
// 个人资料设置
setProfileData,
registerFname,
setupFullProfile,
// 凭证管理
saveCredentials,
loadCredentials,
listCredentials,
setActiveAccount,
updateCredentials,
getCredentialsPath,
// 实用工具
checkFidSync,
checkSignerSync,
getCast
} = require('{baseDir}/../src');
const { Wallet } = require('ethers');
const { autoSetup, setupFullProfile } = require('{baseDir}/../src');
// 1. 生成钱包(或使用现有钱包)
const wallet = Wallet.createRandom();
console.log('请向此地址注资 1 美元的 ETH 或 USDC:', wallet.address);
// 2. 在操作员注资后,运行设置
const result = await autoSetup(wallet.privateKey, 'gm farcaster!');
console.log('FID:', result.fid);
console.log('签名者:', result.signerPrivateKey);
console.log('Cast:', result.castHash);
// 3. 设置个人资料
await setupFullProfile({
privateKey: wallet.privateKey,
signerPrivateKey: result.signerPrivateKey,
fid: result.fid,
fname: 'myagent',
displayName: '我的 AI 智能体',
bio: 'Farcaster 上的自主智能体',
pfpUrl: 'https://api.dicebear.com/7.x/bottts/png?seed=myagent'
});
console.log('个人资料: https://farcaster.xyz/myagent');
完整实现位于:https://github.com/rishavmukherji/farcaster-agent
详细技术文档,请参阅该仓库中的 AGENT_GUIDE.md 文件。