Solana 领空投要注意什么?签名、代币授权和以太坊不一样的地方
在以太坊系的链上领过空投的人,多半已经有一套条件反射:看到 approve 就想想额度给了谁,看到 permit 类签名就多留个心,领完再把授权撤掉。第一次去 Solana 上的项目领空投,这套警觉照样用得上,只是落点换了:授权挂在哪里、同一时间能挂几条、代币本身又能被谁动,都和以太坊不同。
本文依据 Solana 官方文档、SPL 代币程序文档和 Phantom、Solflare 的官方帮助中心整理,资料读取日期 2026 年 9 月 28 日。我们只读了文档,没有拿钱包逐项操作,没读到或没查的地方照实标出。以太坊那一侧见站内授权检查与撤销和Permit2 与离线签名钓鱼。
钱包里多出一种代币,还扣了一小笔 SOL
Solana 的代币放在一个个代币账户(token account)里,每个只属于一个 owner、只装一种代币。钱包持有某种代币的默认账户叫关联代币账户(ATA),钱包、代币程序、代币三者组合只对应一个 ATA 地址。
SPL 代币程序文档写明,谁都可以替用户创建 ATA,还把空投活动替收款人建 ATA、再转账列为示例流程。所以钱包里凭空多出一种代币,并不说明你签过什么。Phantom 帮助中心的说法是:收到代币本身不伤钱包,风险来自去碰它,来路不明的代币别去转、别去兑换。
自己领的时候,建 ATA 要押一笔可退的最低存储余额,另付交易费。运行时和 RPC 方法里这笔钱叫 rent-exempt minimum,但官方说持续收租已经停用,应当看作存储押金,关账户时可全额取回。数额随账户大小变,看官方的创建代币账户说明。关账户前余额要先清零(wrapped SOL 例外),押金转到签关闭指令的人选定的地址。
领空投前先算清哪些钱可能由你出:交易费由交易里的付费账户支付;建代币账户的押金可能由你付,也可能由项目方或第三方付。能领多少、值不值钱都不确定。领取时间、数额和资格只看项目官方公告,入口真假可参考怎么辨别官方渠道。
授权挂在代币账户上,每个账户同一时间只有一个委托
以太坊上 approve 按“地址 + 代币 + 被授权方”一条条挂,一个地址名下常常积下很多条(站内这篇讲过)。Solana 不一样。
代币账户的 owner 字段指能转出、销毁或委托其中代币的一方,和账户底层的“程序所有者”(代币程序)是两回事。授权在 Solana 叫批准委托(Approve),被授权方叫委托(delegate),由 owner 签名。Solana 官方简中文档原话:「一个 token account 一次只能存储一个当前委托和一个委托金额。批准新委托将替换账户上的先前委托和额度。」
委托能转走或销毁的上限就是委托数量;按代币程序公开的源代码(v9.0.0 版),额度随转出扣减,扣到 0 时委托自动清空。撤销用 Revoke 指令,清掉当前委托、额度归零;原版代币程序里由 owner 签,Token-2022(Token Extensions)里当前委托自己也能撤。撤销要随交易上链,交易费照付。
别读过头:同一种代币可以有多个代币账户,各自能挂委托,所以“一个委托”不等于只能授权一个应用;新批准顶替旧的,我们读到的那页没有评价这更安全还是更危险。
Solflare 帮助中心提到,交易要改动代币账户的委托时,它会弹出英文警告“Signing this transaction will allow your funds to be spent at a future date without your approval”(该文日期 2024 年 5 月 1 日)。领空投时看到它,先想一想:领一样东西,为什么要让对方日后动你的币。
比授权更重的签名:换掉代币账户的主人
Solana 的代币账户还有一种比授权更重的权限可以签出去:owner 本身。SetAuthority 指令每次改一种权限,由当前权限人签名;SPL 文档写明 owner 可以用它把账户所有权转给另一个地址。按原版代币程序 v9.0.0 的源代码,改 owner 时原委托和额度一并清空。由 owner 的定义可以推知,换主之后能转出、销毁这些代币的就是新 owner,撤委托帮不上忙。
SPL 钱包集成指南要求钱包绝不应该用 SetAuthority 把 ATA 的 owner 改给别人;SPL 扩展文档也承认所有权可改会带来安全隐患,Token-2022 因此有 ImmutableOwner(不可变 owner)扩展,通过 ATA 程序为 Token-2022 代币建的 ATA 会自动带上。原版代币程序的 ATA 有没有同样保护,我们没有读到官方明文。那条要求是写给钱包开发者的规范,不等于每个钱包都会拦;Phantom 预览怎样显示批准委托、改 owner、关账户,我们也没有读到。
点“领取”之前,这笔交易里可能不止一件事
一笔 Solana 交易可以装多条指令,一起处理,任何一条失败则整笔回滚。每条指令标明调用哪个程序、哪些账户要签名或会被改写。领取按钮背后那笔交易,领取之外的指令同样生效。
失败也要交费:solana.com 写的是失败时费用照收,Phantom 帮助中心说交易被网络处理后才失败的,网络费不退。费用怎么算看官方费用说明。
普通交易带一个近期区块哈希,过一段时间失效,之后到达会被拒,有效期看官方交易文档。持久 nonce 交易是例外:用存储的 nonce 代替区块哈希,可以离线签好、晚些提交,官方提示它将来可能被弃用。它和以太坊按序号排队的 nonce(见领取交易卡住或失败)是两个概念。我们没有读到官方把它和钓鱼联系起来,只能说机制上签好的交易可以晚些上链。
Phantom 开发者文档说,消息签名不花网络费,内容由应用自己写,是应用验证地址归你的一种方便的办法;它会不会拒签“长得像交易”的消息,我们没有读到。
Phantom 帮助中心说它会在签名前模拟每笔交易、给出白话预览;模拟不准时,按它的另一篇说明会改弹“This dApp could be malicious. Do not proceed unless you are certain it is safe.”,这时它给不了通常的保护。Phantom 开发者文档说,新域名会自动带上“未审核”提示,这个提示本身只说明域名新,不等于恶意。
SPL 文档讲 CPI Guard 的背景时写过,让用户对看不透的程序指令授权是危险的,模拟交易、提示余额变化这类办法只是尝试,原话“But, fundamentally, this is intractable.”这是文档对这类授权的一般说法,不针对哪个钱包。
Phantom 的“自动确认”打开后,受支持的应用可以不经你逐笔确认就提交交易。领空投前到 Settings > Connected Apps 看一眼,陌生应用开着的就关掉。
领到手的代币,可能带着你撤不掉的权力
Token-2022 代币还要多看一层:它创建时带了哪些扩展、留了哪些权限。
- 永久委托(permanent delegate):能对该代币任何代币账户转账或销毁,数量不限,代币程序把它签的操作当作 owner 签的处理。Solana 官方英文文档写道:“token account owners cannot revoke the permanent delegate from their token accounts.” 它能绕过 CPI Guard,本身也可以被更换。SPL 文档承认它有被滥用的空间,也列了正当用途。
- 冻结权限:被冻结的账户收不到、转不出、烧不了;冻结权限一旦设为无,已冻结的账户永久冻结。Phantom 建议买一种代币之前先查它的冻结权限是否还开着。
- 默认冻结与可暂停:前者最常见的用法是让新账户一建好就冻结,要冻结权限人解冻;后者暂停期间转账、铸造、销毁都被拒。
- 转账钩子(Transfer Hook):每次转账执行代币方的逻辑,官方列的用途之一是限定谁能收币。你的签名权限不会延伸到钩子程序,它不能凭自己的权限在转账途中转走你的币,要额外扣款只能通过你事先批准的委托;它要的账户缺了,转账直接失败。
- 转账手续费与不可转让:前者到账扣费,有权限人可改费率;后者不能转给别人,但可销毁,清零后可关账户。
领到的币转不出,冻结、默认冻结、暂停、转账钩子、不可转让都可能是原因。针对永久委托、转账钩子这类代币,我们没有读到钱包官方的专门提示。
领完之后怎么查、怎么撤
查:Solana 基金会开源的区块浏览器 explorer.solana.com,按其公开源代码,代币账户页列出 Owner,设了委托才多出 Delegate 和 Delegated amount 两行,永久委托、不可变 owner 也各有一行。那个页面我们没能打开,以上是读源代码得知。Solscan 官方 FAQ 说目前没有计划加链上撤销功能,同时说这个功能在考虑之中;它上面的委托字段怎么看,我们没有读到。
撤:Phantom 帮助中心讲撤销授权的文章承认,在 Solana 上批准了恶意交易,断开连接后仍可能被转走,并说骗局常针对 ATA;它给的办法指向一个第三方工具,我们没有核过,不给链接。Phantom 钱包里有没有自带撤销入口,我们没有读到。它在另一篇里写道(英文原文):“Disconnecting stops apps from reading your wallet data. It does not revoke spending permissions that may already exist.”
Solflare 的入口,按其官方帮助文章(2026 年 1 月 27 日)转述,是 Settings → Security and Privacy → Spending Approvals;界面实际显示什么、能否逐条撤,这一条我们没有查。
撤销只管普通委托。永久委托撤不掉,owner 被改走、账户被冻结也不归它管,所以签之前那一眼比签之后的清理更要紧。
常见问题
Solana 上领完空投,也要像以太坊那样去撤授权吗?
领取时签过批准委托(Approve),就值得去撤。Solana 的委托挂在代币账户上,一个账户同一时间只有一个,撤销用 Revoke 指令,要随交易上链。Phantom 钱包内的撤销入口我们没有读到;Solflare 按其官方帮助文章,入口在 Settings → Security and Privacy → Spending Approvals。永久委托撤不掉。
钱包里突然多了一个没见过的代币,是不是被盗了?
不能这么推断。SPL 代币程序文档写明任何人都可以替你创建关联代币账户,空投方替收款人建账户再转账就是它举的示例。Phantom 帮助中心说收到代币本身不伤钱包,风险来自去碰它,别去转、别去兑换。
Solana 交易失败了,手续费会退吗?
solana.com 的交易文档写的是失败时费用照收;Phantom 帮助中心也说,交易被网络处理后才失败的,网络费不退。费用怎么算,看 solana.com 的费用说明。
领到的代币为什么转不出去?
可能是代币账户被冻结,或代币让新账户默认冻结;代币处在暂停期;代币带转账钩子,收款方不在允许范围或缺了它要的账户;也可能代币本身不可转让。Phantom 建议买一种代币之前先查它的冻结权限是否还开着。
Solana 领空投为什么可能要付一小笔 SOL?
交易费之外,钱包还没有这种代币的关联代币账户时要先建一个,建时要押一笔可退的最低存储余额。出这笔押金的一方可以不是账户主人:可能是你,也可能是项目方或第三方替你建账户时付的。关账户时押金可全额取回,转到签关闭指令的人选定的地址。数额看 solana.com 的创建代币账户说明。
系列:助记词、授权与签名安全