在 Solana 中,究竟什么才算作一个“账户”?
在 Solana 的账户模型中,几乎万物皆可为账户。你的钱包是一个账户,智能合约也是一个账户。代币余额存储在账户内,NFT 的元数据也存储在账户内,程序状态同样如此。
其他区块链通常将“合约”与“钱包”区分开来,而 Solana 则没有这种区分。在 Solana 区块链上,钱包、程序和数据的结构是完全相同的。
每个账户都有自己唯一的地址。这个地址本质上就是一个公钥,长度为 32 字节。该密钥可以由人类或程序控制,具体取决于账户的类型。
定义每个账户的关键字段
每个账户都包含一组字段,这些字段揭示了它的身份及其运作方式:
- 公钥(地址):这是账户的 ID,也是其在区块链上的“家”。它用于查找用户并与之交互。
- Lamports(拉姆波):这是账户的余额。它以 SOL 的最小单位计量(1 SOL = 1,000,000,000 Lamports)。
- 所有者(Owner):这是程序 ID。拥有此权限的程序可以更改账户数据。
- 数据(Data):这是一个字节数组,存储账户需要持有的任何内容。
- 可执行标志(Executable):这是一个标志位,指示该账户是否包含可运行的程序代码。
- 租金纪元(Rent Epoch):这用于跟踪租金状态随时间的变化。由于现在所有新账户都必须免收租金,因此在当今它主要作为一个遗留字段存在。
其中,“所有者”字段起着至关重要的作用。值得深入了解一下:地址告诉你它住在哪里,余额告诉你它持有多少价值,所有者告诉你谁在掌控,数据告诉你它存储了什么,而标志位则告诉你它是否可以运行。一旦你能读懂这些字段,区块浏览器对你来说就会变得容易理解得多。
所有权:整个协议运行的基石规则
只有账户的所有者才能更改账户的数据或扣除其 Lamports。任何人都可以向账户发送 Lamports,但只有所有者程序才能将其取出。
以加密钱包为例。默认情况下,系统程序拥有该钱包。要从其中转出 SOL,你需要使用钱包的私钥进行签名,然后由系统程序执行转账。
这一条规则在无需处处添加额外检查的情况下保障了网络的安全。非所有者的程序无法触碰该账户,运行时会在每次尝试时阻止它,且无法绕过。
为什么这对在 Solana 上构建应用至关重要
当你在 Solana 上构建应用时,你的程序必须声明所有权。如果希望管理某个账户,该程序必须成为其所有者。
这与以太坊不同。在以太坊中,合约将其自身状态直接保存在合约内部。而在 Solana 上,你需要同时追踪两件事:你追踪哪些账户是你的程序所拥有的,以及哪些账户只是被程序读取。
特性SolanaEthereum合约状态的存放位置位于由程序拥有的独立数据账户中位于合约本身内部代码与数据相互分离存储在一起钱包与合约两者均为账户类型独立的账户类型 程序账户与数据账户
Solana 将代码与数据分开,二者之间的界限清晰明了。
程序账户保存已编译的代码。这些代码可以被执行。这类账户会被标记为“可执行”。程序部署后可以是不可变的,但大多数是可升级的。这意味着升级权威方可以在稍后替换代码。这是一个现实的交易权衡,因为用户必须信任持有该权威方的实体。
数据账户则保存实际的状态。想想代币余额、用户档案或游戏分数。基本上,应用程序需要保存的任何内容都可以存放在这里。这些账户会被创建、更新,有时随着应用的运行也会被关闭。
这种设置正是 Solana 能够高速运转的原因。运行时预先知道交易将触及哪些账户,因此它可以识别出不重叠的交易,然后并行运行它们,而无需逐个串行执行。
程序派生地址(PDA)
有一个概念让许多初学者感到困惑,那就是程序派生地址(Program Derived Address,简称 PDA)。
这些账户完全没有私钥。相反,它们的地址是由程序的 ID 加上一些可选的种子值(seed values)共同生成的。
PDA 允许程序“拥有”账户。程序可以使用 `invoke_signed` 代表这些账户进行签名,无需人类进行任何签名操作。这是大多数链上应用管理其状态的方式。例如,去中心化交易所(DEX)可能使用 PDA 来跟踪其订单簿,NFT 市场也可能使用 PDA 来管理其挂单列表。
租金:留在区块链上的成本
这里有一个令许多新手惊讶的事实:在 Solana 上,账户必须保持最低余额。
这确保了它们在链上的活跃度。协议为此要求一小笔押金,金额取决于账户存储的数据量。原因是:每个验证者都必须在网络上复制这些数据。
好消息是,所有新账户都必须是免租金的。只需在创建时存入足够的 SOL 即可。这笔金额大约相当于两年的租金费用。此后,该账户将不再产生任何费用。
在实践中,这很简单。开发者计算出所需的最低余额,在创建账户时一次性注资,然后任务就完成了。而且,由于这是一笔押金而非手续费,当账户被关闭时,你可以收回这笔资金。
当账户无法支付租金时会发生什么?
如今,低于免租金最低限额的账户将无法创建,导致交易失败。如果一个账户的余额被耗尽至零,运行时会将它从分类账中移除,并回收其占用的存储空间。
在实践中,这种情况并不常见。大多数工具会自动处理租金豁免问题。尽管如此,了解这一点仍然很有好处,特别是如果你要构建动态创建账户的应用程序。
如果你在任何时候看到创建过程中因“资金不足”而失败的交易,缺失的押金通常是原因所在。
这对普通加密用户意味着什么
也许你只是使用 Solana 应用程序,而不是在协议层面进行构建。如果是这样,上述大部分内容对你来说是隐藏的。但有几个事实仍然值得了解:
- 每个钱包都是一个独立的账户,每个代币也是如此,每个 NFT 也是如此。每一个都有其唯一的地址。
- 创建新的代币账户需要花费少量的 SOL。例如,当你首次持有 SPL 代币时,就会发生这种情况。标准的代币账户大约需要 0.002 SOL 作为免租金押金。
- 关闭你不使用的代币账户可以帮助你。实际上,这可以退还那部分 SOL。这正是生态系统中存在清理工具的原因。检查你的钱包,找出未使用的代币账户并关闭它们,以收回你的 SOL。
在关闭任何账户之前,请确保余额为零,并且你不再需要该代币。大多数钱包会清晰地显示这一点,快速查看详细信息屏幕可以避免你误删仍在使用的资产。
结论
账户模型是基础层。Solana 设计中的其他一切都是建立在此之上的。一旦理解了这一概念,许多其他方面也就迎刃而解了:代码和数据彼此分离,所有权决定了谁可以更改什么,PDA 允许程序自主管理其状态。
对于开发者而言,这些知识不是可有可无的,它塑造了你构建每一个程序的方式。
对于普通用户而言,它也解释了许多现象:解释了为什么某些操作需要花费少量的 SOL,也解释了为什么你的加密货币最终分散在许多地址中,而不是整齐地堆积在一个钱包余额里。
SOL

交易所
交易所排行榜
24小时成交排行榜
人气排行榜
交易所比特币余额
交易所资产透明度证明
去中心化交易所
资金费率
资金费率热力图
爆仓数据
清算最大痛点
多空比
大户多空比
币安/欧易/火币大户多空比
Bitfinex杠杆多空比
ETF追踪
索拉纳ETF
瑞波币ETF
香港ETF
比特币持币公司
加密资产反转
以太坊储备
HyperLiquid钱包分析
Hyperliquid鲸鱼监控
大额转账
链上异动
比特币回报率
稳定币市值
期权分析
新闻
文章
财经日历
专题
钱包
合约计算器
账号安全
资讯收藏
自选币种
我的关注