Solana owner和authority有何区别? 图 1
Solana owner和authority有何区别? · 图 1

在Solana里,“owner”至少有两种界面含义。账户头部的owner字段是一个程序ID,决定哪个程序能修改账户data;钱包或Token界面里的authority通常是data内部记录的公钥,由程序按业务规则检查。混淆两者会把权限审计做错层。

运行时owner是一道硬边界

每个账户都带owner字段。执行指令时,运行时阻止非owner程序任意写入data或扣减该账户lamports。System Program拥有普通系统账户,Token Program或Token-2022拥有对应Mint和Token账户,用户公钥即使签名也不能直接改这些账户字节。

authority由owner程序解释

Token账户data中可以记录转账authority、delegate或close authority;Mint可以记录mint authority和freeze authority。它们不是运行时owner,而是Token程序读取后决定是否允许某项指令的业务字段。不同程序可定义单一公钥、多签、角色表或时间锁,名称相同也不保证语义相同。

示例owner字段业务authority
普通SOL账户System Program私钥签名者控制系统指令
SPL Token账户Token Programowner/delegate/close authority
Mint账户Token Programmint/freeze authority
应用PDA账户应用程序IDdata中可另存管理员或用户

PDA没有私钥,为什么能签名

PDA被设计为离曲线地址,没有对应Ed25519私钥。所属程序在CPI中提供正确seeds与bump,运行时可把该PDA视为签名者。这种签名能力只在程序调用上下文中成立,不意味着任何人知道PDA私钥,也不等于PDA自动拥有它控制的账户。

PDA账户本身还可能由System Program创建后分配给应用,或作为Token账户由Token Program拥有、把PDA设为业务authority。审计时必须分别读取账户owner和data中的authority。

权限转移怎样核验

先从RPC取得账户原始owner;按owner程序的正式布局解码data;列出所有authority、delegate和多签阈值;查询最近的权限变更交易;最后验证新authority是否能签名或由哪个程序代表签名。只看区块浏览器顶部的Owner标签不够。

撤销权限时还要确认是否把字段设为None、转给新地址,或只是移除某个delegate。Token-2022扩展可能增加更多权限,旧解码器会漏读。

PDA派生和invoke_signed可看Solana PDA,Token-2022费用权限见转账费扩展,账户空间与关闭流程见rent与realloc