跳转到内容

钱包与密钥

casty 涉及两个密钥。托管地址是一个拥有你的 fid 的 Ethereum 账户,它只签署一件事:应用密钥的请求。 应用密钥是 casty 生成的一个 Ed25519 密钥,它签署其他一切:cast、反应、关注。本页说明这是如何运作的。

内容 存放位置 何时使用
助记词 无处存放:在 casty init 或 casty key revoke 中输入一次,使用后清零 推导托管地址并签署密钥请求,或签署撤销
应用密钥 ~/.config/casty/keys.enc.json,scrypt 和 XChaCha20-Poly1305,权限 0600;使用 1-node.sh serve 时节点主机上也有 每条消息;超过 TTL 未使用后失效(默认 30 天,最多 90 天),每条消息都会让它续期
密钥库口令 在隐藏输入的提示符下输入,或在主机上作为 Docker secret 打开密钥库

casty init 从助记词推导出托管账户(--address-index 选择同一助记词的另一个账户),询问节点它持有 哪个 fid,生成应用密钥,让托管账户签署密钥请求(EIP-712 类型化数据,由 @farcaster/core 构建), 然后通过节点发送 KEY_ADD 消息。没有交易,没有 gas,也没有 API 密钥。 casty key list 显示节点为你的 fid 列出的每个密钥;casty key revoke 移除其中一个, 使用助记词,或者使用 --self 时用密钥本身。“你”页面显示这些密钥,在这个 casty 的密钥失效前一周发出警告, 并用浏览器中的钱包添加密钥(见下文)。

托管签名是普通的 EIP-712 类型化数据,所以任何能为托管地址签署类型化数据的东西都可以授权应用密钥: 钱包应用、钱包应用背后的硬件钱包、浏览器扩展。

在“你”页面中选择 “add a key with your wallet”:casty 生成 Ed25519 密钥和两条类型化数据消息, 页面把它们交给浏览器中的钱包(通过 EIP-1193 调用 eth_signTypedData_v4:MetaMask、Rabby、Rainbow 等,以及它们背后的 Ledger),钱包用托管地址签名,casty 对照该地址检查两个签名,通过节点发送 KEY_ADD 并保存密钥。助记词从不离开钱包,casty 也从不会看到它。casty init --fid <fid> 在没有助记词、没有密钥的情况下完成设置,由页面添加第一个密钥。对于托管仅仅是一个恢复助记词而别无其他的账户, 终端流程依然保留。在浏览器和手机上给出了具体步骤。

  • 在浏览器中没有钱包的手机上,页面提供在 MetaMask、Coinbase Wallet 或 Trust Wallet 中打开自己的选项, 包括配对;宣告自身的钱包(EIP-6963)可以同时被发现;账户不对的钱包会被请求让你选择。 WalletConnect 是一个依赖,也是一个由别人运行的中继,因此被有意排除在外。
  • 托管是 farcaster.xyz 所提供的恢复助记词的账户,可以把该助记词一次性导入上述某个钱包; 从那以后由钱包签名,助记词不会输入 casty 的任何部分。

协议中有 VerificationAddAddress 消息,即账户对其拥有某个 Ethereum 或 Solana 地址的证明, 节点会应答 verificationsByFid。页面上的个人资料列出这些地址,每个都链接到对应的浏览器并可复制; 你的地址也在“你”页面中。读取它们不花费任何费用,也不询问任何第三方;不从任何链上读取数据。

不需要 gas 的密钥在超过 TTL 未使用后失效,它签署的每条消息都会让它续期。casty 从不为了让密钥保持有效而 以你的名义发帖;页面会提前一周发出警告,casty init --ttl 90d 是协议允许的最长期限。

  • 支付、打赏和兑换。每一项都需要链 RPC、有资金的钱包和链上状态,而 casty 有意让它们不出现在自己的路径上 (见安全)。个人资料上已验证的地址可以复制到你信任的钱包中。
  • WalletConnect。它会增加一个依赖和一个由别人运行的中继;浏览器中的钱包和钱包应用自带的浏览器 覆盖了同样的场景。
  • 通行密钥配对和操作系统钥匙串。页面用一个放在链接片段中传递的 256 位令牌配对,casty web 每次启动时询问一次口令。