将 Phantom 连接到 Web App 改变了我对“登录”的看法
Source: Dev.to
概览
在 #100DaysOfSolana 的第 4 天,我构建了一个小型 Vite 应用,用于连接浏览器钱包。该功能本身只有约 30 行代码,但它引发的思维方式转变却难以量化。
最小化 Web 应用
一个最小化的 Web 应用具备以下功能:
- 使用
@wallet-standard/app中的getWallets()检测已安装的钱包 - 通过检查
wallet.chains过滤出兼容 Solana 的钱包 - 只需一次按钮点击即可提示 Phantom 进行连接
- 显示已连接的地址和 devnet 余额
import { getWallets } from "@wallet-standard/app";
const { get } = getWallets();
const solanaWallets = get().filter(wallet =>
wallet.chains.some(chain => chain.startsWith("solana:"))
);
无需 API 密钥。无需后端。无需会话管理。钱包自行处理所有这些。
信任模型对比
在 Web 2 中,“使用 Google 登录”更像是一种便利功能:你把身份交给 Google,Google 为应用颁发令牌。应用信任 Google,你也信任 Google。一切都通过 Google 流转。
而使用 Phantom 时,应用永远看不到你的私钥,也不与任何中心化的认证服务器通信。它向你的钱包扩展发送连接请求,钱包弹出提示让你批准。如果你批准,应用仅收到你的公共地址——仅此而已。之后所有需要你签名的操作,都通过同样的批准流程进行。
信任模型被完全颠倒:
- 应用 不 对你进行身份验证。
- 你 对自己进行身份验证,应用仅观察结果。
“使用 Phantom 登录”并不是 “Web 3 版的使用 Google 登录”。它更像是出示护照:应用看到的是你身份的证明,但它永远不持有护照本身。
展望
挑战的第 2 周将聚焦于编写交易并在链上转移代币。我期待看到整个签名流程的端到端实现——从用户点击按钮、Phantom 提示批准、到交易落地 devnet。
征求反馈
如果你正在跟随我的进度,请在下方分享你的钱包设置体验。浏览器钱包模型有没有让你感到意外的地方?
我的 #100DaysOfSolana 之旅的一部分。