
SSP 中的 Solana
Solana 快、便宜,而且越来越成为稳定币真正流动的地方。它同时也是自我保管多签在历史上最难做对的一条链——不是因为密码学困难,而是因为 Solana 的账户模型让「由多方共同控制的一个地址」变成了比在 Bitcoin 上要古怪得多的东西。
SSP 用你在 Bitcoin 与 Ethereum 上已经在用的那套 2-of-2 多签来保管 SOL 与 SPL 代币:一把密钥在浏览器扩展里,一把在你的手机上,每一笔交易都需要两者。本文讲的是这在 Solana 上具体意味着什么——地址如何派生、手续费由谁支付、你的设备验证了什么,以及哪些部分与你已经熟悉的链确实不同。

从自我保管的位置看,Solana 是什么
Solana 是一台单一的全球状态机,它并行处理交易,而不是一笔接一笔。对持币者而言,有三个性质比吞吐量的头条数字更重要。
第一,一切皆账户。你的余额、一个代币的 mint、一个程序的代码,以及该程序存储的数据,全都存在于带有地址和所有者的账户里。第二,账户需要缴纳租金:要在链上存在,账户必须持有与其大小成比例的最低 SOL 余额。这笔押金在账户关闭时可以退回,但它是真金白银,总得有个出处。第三,交易很快过期——一笔普通的 Solana 交易引用一个较新的 blockhash,大约一分钟后便不再有效。
上述每一点都对双设备签名有直接影响,而在 SSP 里每一点都被明确处理,而不是含糊带过。如果你想要未经转述的版本,Solana 自己的核心文档是账户与租金模型的第一手来源。
一个没有创建者的地址
在多数 Solana 多签设计中,钱包必须被创建出来。有人发送一笔交易把它确立下来,而由此得到的地址取决于那笔交易中所选的输入——通常是一个全新的随机一次性密钥。实际效果是:在创建者把它带到世上之前,该地址并不存在,也无法接收资金。
SSP 的链上程序不是这样。你的金库地址是「排序后的成员集合 + 批准阈值」的指纹,仅此而已。任何知道成员是谁、需要几人批准的人,都能在链下算出这个地址,早于任何链上动作。注册是无需许可的:程序只核对你提交的成员确实哈希到所声明的地址,因此注册这一动作不会改变任何关于「谁能花钱」的事实。
其结果是:没有需要信任的创建者,没有特权注册方,也没有管理员密钥。花费仅由程序内部的阈值校验来把关。若想看到全貌,为什么 Solana 多签地址很难讲的是底层问题,自我启动的 Solana 多签讲的是程序本身,而SSP 对比 Squads V4则是逐项对照。
如果 2-of-2 这个模型本身对你还是新的,请先从什么是 2-of-2 多签读起。
为什么两台设备需要持久 nonce
过期带来的问题是这样的。你的扩展构造并签名一笔交易,接着要由手机批准。若你离开房间、吃了顿饭再回来,交易所引用的 blockhash 早已作废,整笔交易必须重建。
SSP 用一个从你的多签地址派生出来的持久 nonce 账户解决这一点。交易引用的不是较新的 blockhash,而是一个只有在交易真正上链时才会前进的 nonce。签名窗口不再是一只秒表。你可以在几分钟甚至几小时之后在手机上批准,交易依然有效——但它仍然只能被使用一次,因为执行会让 nonce 前进。
nonce 账户在你第一次发送时创建,也是租金体现在首次发送成本中的两个账户之一。持久 nonce 与双设备签名讲得更深。
手续费由谁支付
在 Solana 上,为一笔交易支付手续费的账户称为 fee payer,并且必须签名。这给一个全新的多签带来了尴尬的启动难题:金库需要 SOL 才能支付那笔用来转移它自己 SOL 的交易,而需要租金的那些账户此时尚不存在。
SSP 使用 paymaster。SSP relay 运营一个账户,以 fee payer 身份签名,垫付网络手续费和任何租金,并在同一笔交易内由你的金库偿还。没有单独的步骤,没有授予的信用额度,也没有任何办法让这笔偿还在缺少你两个签名的情况下发生——它就搭在你的两台设备所批准的提案里。
有两点值得记牢:
- 你不需要为了 gas 而先给地址充值 SOL。 收 SOL,发 SOL。账户是在首次发送时创建的。
- 你的第一次发送比之后的贵。 第一次发送要支付多签账户与 nonce 账户的永久租金;之后的发送只比网络手续费多一点点。确切数字在本系列的手续费文章里。
如果 paymaster 这个概念对你还陌生,gas 代付与 paymaster 详解介绍了通用范式——SSP 在 EVM 链上早已使用同样的思路,见SSP 中的 Ethereum。
你可以持有什么
SSP 中的 Solana 支持原生 SOL 与 SPL 代币。开箱即含 Circle 官方的 USDC mint 以及 Solana 上的 FLUX,而在你金库中发现的其他 SPL 代币,SSP 也会一并解析。
最容易让人绊倒的区别是:在 Solana 上,你并不是把代币放在主地址里。每种代币都住在自己的关联代币账户中,由你的地址拥有,每个 mint 一个。该账户同样需要租金,这正是为什么把某个 SPL 代币发给一个从未持有过它的人会稍贵一些:你是在为让对方的代币账户诞生而付费。SSP 会把它作为转账的一部分自动创建,而不是抛出错误失败,本系列的代币账户文章会拆解其中细节。

你的设备在你签名前检查了什么
Solana 交易存在一种 Bitcoin 交易所没有的不透明:一笔交易究竟做了什么,藏在指令数据里,钱包必须先解码,才能告诉你任何属实的信息。一个只是把服务器所说的内容照搬显示出来的钱包,是在要求你信任那台服务器。
因此 SSP 使用开源库 @runonflux/solana-multisig,在你自己的设备上逐字节解码。收款方、金额与代币 mint 都从原始字节中读出,并与正在显示的内容比对。若两者不一致,签名会被硬性阻止——此处的不符指向的是正在进行的攻击,而非显示故障。在 SPL 转账中,代币的小数位数被嵌入所签名的指令本身,因此一个声称不同小数位数的 mint 会导致链上程序拒绝该交易。
同样的原则也管着程序本身:主网构建可以从已公开的源码复现,因此部署在 SSPWVu7dtTDkZYmDx73StqV46PioSmdiNE7igpjHK1r 上的字节码可以被独立重建并比对。一项安全主张的价值,取决于你亲自核查它的能力。
如何开始
将 SSP Wallet 与 SSP Key 更新至最新版本,然后在链选择器中启用 Solana。借助 v2 的批量同步,你可以在手机上一次批准,就把它与任意其他链一同启用。如果你还完全没有配置过 SSP,设置你的第一个 SSP 钱包是起点。
自此之后,Solana 在 SSP 中的表现与其他任何一条链无异:它计入你的 Portfolio 总额,发送遵循同一套「填写 → 复核 → 批准」流程并完整显示收款地址,而每一笔交易都由你的两台设备共同签名。主网上线公告说明了发布了什么以及何时发布。


