在浏览器和手机上
./bin/casty webcasty web 询问密钥库口令,然后在 http://127.0.0.1:3390 提供一个页面,它与其他命令通过同一个节点
读取和写入。它打印一个带令牌的链接;打开它即可配对浏览器。
casty web on http://127.0.0.1:3390open to pair a browser: http://127.0.0.1:3390/#token=<43 characters>Ctrl-C stops it; until then the app key stays unlocked in memory想在没有节点的情况下看看它,pnpm demo:web 会启动模拟节点,用测试助记词添加密钥,发布一条 cast,
并在空闲端口提供页面,直到你按下 Ctrl-C。

页面能做什么
Section titled “页面能做什么”页面拥有 CLI 的各项命令,名称相同。
| 在页面上 | 在终端中 |
|---|---|
| 带编号的时间线:你的 cast 和你关注的账户的 cast,最新的在前 | casty feed |
| mentions:提及你的 cast,以及对你最新 25 条 cast 的回复 | casty mentions |
| 上方的开关:显示或隐藏回复,以及每个应用一个开关 | --no-replies、--exclude-app |
| 点击频道名称:只显示该频道;再次点击过滤器:显示全部 | --channel |
| 点击一条 cast:它所回复的 cast、这条 cast、对它的回复 | casty thread |
| reply、recast、like,以及 more 中的:delete、在 farcaster.xyz 上打开、复制链接 | reply、recast、like、delete |
底部的 › cast something:文本中的 @name 会成为提及,可选的频道,最多两个链接 |
cast --channel --embed |
| 点击一个名称:该账户的 cast、它发帖所经由的应用、关注 | clients --fid、follow、unfollow |
| “你”页面:你的 fid、托管地址、应用密钥、存储、节点和时钟 | whoami、key list、storage、doctor |
| “你”页面中的 “add a key with your wallet”(这个 casty 已有密钥后折叠在 “add another key” 下):一个由浏览器中的钱包授权的新应用密钥 | 用助记词运行 casty init |
| 个人资料中已验证的地址,Ethereum 或 Solana,带复制按钮 | |
| “你”页面中的搜索框:按 @name 或 fid 查找账户 | follow @name |
撰写框中的草稿在重新加载后仍然保留,按它所回复的内容保存在浏览器中,直到这条 cast 发出。 时间线在滚动到末尾时加载下一页,“show more” 按钮保留给键盘使用。在手机上,从时间线顶部向下拉再松开 即可刷新,因为安装后的页面没有可以下拉的浏览器栏。
每当页面绘制时间线或提及时,它会像 casty feed 那样保存它们的顺序,所以在终端中运行
casty like 3 作用于屏幕上编号为 3 的 cast。以最近一次显示的列表为准:另一个浏览器,
或者终端中的 casty feed、casty mentions 或 casty thread,都会重新编号。
来自钱包的应用密钥
Section titled “来自钱包的应用密钥”托管地址用两个 EIP-712 签名授权一个应用密钥,即密钥请求和密钥添加;casty init 让助记词签署它们。
页面也可以改为让钱包签署:在“你”页面中,“add a key with your wallet” 向 casty web 请求一个新密钥和
这两条消息,把它们交给浏览器中的钱包(钱包扩展,或者在钱包应用自带的浏览器中打开的页面,
通过 EIP-1193 调用 eth_signTypedData_v4),检查钱包的账户是否就是托管地址,然后把签名发回;
casty web 检查签名,通过你的节点发送 KEY_ADD,并把密钥加密保存为它最新的密钥。
助记词从不离开钱包,扩展背后的硬件钱包也以同样的方式工作。
要完全不用助记词开始,casty init --fid <fid> 从节点获取信息写入配置(包括托管地址),不创建密钥;
然后 casty web 要求为它即将创建的密钥库设置口令,由页面添加第一个密钥。移除密钥仍然在终端中进行
(casty key revoke,使用助记词或密钥本身)。
页面按照钱包宣告自身的方式(EIP-6963)查找钱包,所以同时装有多个扩展也没有问题,并以 window.ethereum
作为后备。如果钱包提供的账户不是托管地址,页面会请求它让你选择正确的账户。密钥消息指定的是 Ethereum
主网,所以在 Base 或 OP Mainnet 上的钱包会先被请求切换(MetaMask 拒绝为当前链以外的链签名);
切换不花费任何费用。在浏览器中没有钱包的手机上,页面提供在 MetaMask、Coinbase Wallet 或
Trust Wallet 中打开它的链接,以及一个复制配对链接的按钮,以便粘贴到那里的页面上,从而由钱包自带的浏览器
签名。这些链接不携带令牌:每个链接都会先经过钱包厂商的服务器。托管地址对应 farcaster.xyz 的
Farcaster 恢复助记词的账户,可以把该助记词一次性导入上述任一钱包,而从不需要在终端中输入它。
个人资料显示其账户已验证为自己所有的地址,Ethereum 或 Solana,数据来自节点:每个地址都链接到对应的 浏览器(只在点击时打开),并且可以复制。你的地址也列在“你”页面中。不从任何链上读取数据。
为了保持快速,当你切换过滤器、显示更多或回到某个视图时,页面会复用过去 30 秒内从你的节点读取的内容。 你在页面上做的任何写入都会清除这些缓存,刷新、重新加载页面,以及在 feed、mentions 或“你”页面已打开时 再次点击它们也会清除;在终端中发布的 cast 会在下一次刷新时出现,或者在 30 秒之后的加载中出现。 重新加载页面会重新读取 cast,但关注列表取自过去十分钟内的数据;刷新也会重新读取关注列表, 所以在另一个应用中关注的账户会立即出现。
页面打开期间,它每两分钟询问一次你的节点,并在你每次回到页面时再询问一次,自你上次查看以来是否有人
提及你或回复了你最新的 25 条 cast。答案以数字显示在 mentions 旁边、标签页标题中,如果你把页面安装为应用
且浏览器允许,还会显示在页面图标上。打开 mentions 会清除它。在终端中运行 casty mentions,
或在另一个浏览器中打开 mentions,也会清除:casty 把向你显示过的最新提及记在它的配置目录中,
而不是浏览器中。第一次计数从页面第一次询问的时刻开始,所以在那之前的提及从不算作新的。
在这个 casty 的应用密钥失效前一周,栏下方的提示会说明这一点;任何 cast、点赞或关注都会让它续期。 撰写框按字节计数。超过 320 字节时,cast 作为长 cast 发出,最多 1024 字节。写入会像 CLI 那样 等到节点拥有该消息;如果失败,页面显示的消息和提示与 CLI 打印的相同。casty 旁边的圆点代表你的节点: 已同步时为绿色,落后时为琥珀色,没有应答时为红色。
键盘操作:n 新建 cast,r 刷新,j 和 k 在 cast 之间移动,l 点赞,o 或 Enter 打开,
Esc 关闭,Ctrl-Enter 或 Cmd-Enter 发送。
右上角的文字设置主题:auto 跟随系统,light 和 dark 在该浏览器中保持所选。在手机上,栏中没有空间放它, 也没有空间放刷新按钮:主题在“你”页面中,而在 feed、mentions 或“你”页面已打开时再次点击它们会重新加载。

页面不从其他网站加载任何内容。它不显示图片和头像,cast 中的链接只有在你点击时才会打开。
./bin/casty web --listen 0.0.0.0:3390这会为机器在网络上的每个 IPv4 地址打印一个链接,并打印第一个链接的二维码。用同一网络中的手机扫描它。
页面可以添加到主屏幕,之后会全屏打开;如果那里显示配对界面,把链接粘贴进去即可。
机器必须保持开机并运行 casty web。
连接是普通 HTTP。任何能监视该网络流量的人都能读取令牌,并在你停止 casty web 之前以你的身份发帖。
请使用你信任的网络,或者把手机和机器加入 WireGuard 这样的 VPN,并只在 VPN 地址上监听。
要让之前打印的所有链接失效,停止 casty web,然后用 --new-token 重新启动它。
已配对的浏览器为该地址和端口(比如 http://192.168.1.20:3390)保存令牌。在另一个网络中,
同一个地址可能属于别人的机器,从主屏幕在那里打开的页面会把令牌交给它。如果这种情况可能已经发生,
请用 --new-token 启动 casty web。
打开链接会把它(包括令牌)记入浏览器的历史记录,如果浏览器会同步,还会记入同步的历史记录。 在共用的浏览器上请清除这一条记录。
--read-only 跳过口令。此时页面只能读取,不能写入。
Ctrl-C 停止 casty web。仍在等待其消息的写入(cast、点赞、recast、删除或关注)会先被允许完成,
终端会说明这一点;再按一次 Ctrl-C 会立即停止。
要从任何网络访问页面,而不只是机器所在的网络,请改为在节点主机上以 HTTPS 运行它,在那里提及或回复 还可以作为推送通知到达手机:从任何网络访问。
页面如何受到保护
Section titled “页面如何受到保护”- 除非
--listen另有指定,它监听 127.0.0.1。 - 每个 API 请求都携带令牌。链接把令牌放在
#之后,浏览器从不把这部分发送给服务器; 页面把它移到浏览器的存储中,并从地址栏中去掉,在已经显示该页面的标签页中打开链接时也是如此。 - 令牌保存在
~/.config/casty/web-token中,权限 0600,所以已配对的手机在重启后仍保持配对。 - 写入只接受 JSON,所以其他网站上的表单无法向页面提交。
- Host 不是 IP 地址、
localhost或--listen主机的请求会被拒绝,所以把自己的域名指向你机器的网站 无法访问页面。 - 页面只运行它自己的脚本和样式,并把 cast 文本作为文本放入,从不作为 HTML。
casty web运行期间,应用密钥在内存中处于解密状态,就像单次casty cast运行期间一样。
Usage: casty web [options]
the feed, threads and a compose box in a browser, on this machine or a phone
Options: --listen <host:port> where to serve; 0.0.0.0:3390 lets a phone on the same network in (default: "127.0.0.1:3390") --new-token pair again; links printed before stop working --read-only do not unlock the app key; the page reads but cannot write --no-allow-fname-server look @names up with your node only; by default names it does not know are looked up on fnames.farcaster.xyz (public, no key) -h, --help display help for command