在Solana上,所有数据都存储在所谓的“账户”中。Solana上数据的组织方式类似于[键值存储],其中数据库中的每个条目都称为“帐户”。要点账户最多可以存储10MB的数据,这些数据可以由可执行程序代码或程序状态组成。账户需要以SOL支付租金押金,金额与存储的数据量成
<!--StartFragment-->
在 Solana 上,所有数据都存储在所谓的“账户”中。Solana 上数据的组织方式类似于 [键值存储],其中数据库中的每个条目都称为“帐户”。
<!--EndFragment-->
<!--StartFragment-->
<!--EndFragment--> <!--StartFragment-->
[每个帐户都可以通过其唯一地址来识别,该地址以Ed25519] 格式表示为 32 个字节PublicKey
。您可以将地址视为帐户的唯一标识符。
<!--EndFragment-->
<!--StartFragment-->
这种账户和地址的关系可以看作是一个键值对,地址是定位账户对应链上数据的关键。
<!--EndFragment-->
<!--StartFragment-->
账户的 [最大大小为 10MB](10 兆字节),Solana 上每个账户上存储的数据都具有以下称为 [AccountInfo]的结构。
<!--EndFragment-->
<!--StartFragment-->
每个帐户AccountInfo
包括以下字段:
data
:存储帐户状态的字节数组。如果帐户是程序(智能合约),则存储可执行程序代码。此字段通常称为“帐户数据”。executable
:一个布尔标志,指示该帐户是否是一个程序。lamports
[:以lamports]为单位表示账户余额的数字 ,lamports 是 SOL 的最小单位(1 SOL = 10 亿 lamports)。owner
:指定拥有该账户的程序的公钥(程序ID)。作为 Solana 账户模型的关键部分,Solana 上的每个账户都有一个指定的“所有者”,具体来说是一个程序。只有被指定为账户所有者的程序才能修改存储在账户上的数据或扣除 Lamport 余额。需要注意的是,虽然只有所有者可以扣除余额,但任何人都可以增加余额。 <!--EndFragment--> <!--StartFragment-->
信息
要将数据存储在链上,必须将一定数量的 SOL 转移到账户中。转移的金额与账户中存储的数据大小成正比。这个概念通常被称为“租金”。然而,你可以把“租金”想象成“押金”,因为分配给账户的 SOL 可以在账户关闭时完全收回。
<!--EndFragment-->
<!--StartFragment-->
Solana 包含少量原生程序,它们是验证器实现的一部分,并为网络提供各种核心功能。您可以找到原生程序的完整列表。
在 Solana 上开发自定义程序时,您通常会与两个本机程序(系统程序和 BPF 加载器)交互。
<!--EndFragment--> <!--StartFragment-->
默认情况下,所有新帐户均归 [系统程序所有。系统程序执行几项关键任务,例如:
在 Solana 上,“钱包”只是系统程序拥有的一个账户。钱包的 lampor 余额就是该账户拥有的 SOL 数量。
<!--EndFragment-->
<!--StartFragment-->
信息
只有系统程序所拥有的账户才可以作为交易费用的支付者。
<!--EndFragment-->
<!--StartFragment-->
BPF [Loader] 是网络上所有其他程序(不包括 Native 程序)的“所有者”。它负责部署、升级和执行自定义程序。
[Sysvar 帐户是位于预定义地址的特殊帐户,可用于访问集群状态数据。这些帐户会使用有关网络集群的数据进行动态更新。您可以在此处]找到 Sysvar 帐户的完整列表。
<!--EndFragment-->
<!--StartFragment-->
在 Solana 上,“智能合约”被称为 [程序]。程序是一个包含可执行代码的帐户,由设置为 true 的“可执行”标志表示。
有关程序部署过程的更详细说明,请参阅 本文档的[部署程序]页面。
<!--EndFragment--> <!--StartFragment-->
[当在 Solana 上部署]新程序时 ,技术上会创建三个独立的帐户:
<!--EndFragment--> 例如,这里是代币扩展 [程序账户]及其对应 [程序可执行数据账户]的 Solana Explorer 链接。 <!--StartFragment--> <!--EndFragment--> <!--StartFragment-->
为了简单起见,您可以将“程序帐户”视为程序本身。 <!--EndFragment--> <!--StartFragment-->
信息
“程序账户”的地址,也就是我们通常说的“程序ID”,用于调用该程序。
<!--EndFragment-->
<!--StartFragment-->
Solana 程序是“无状态的”,这意味着程序账户仅包含程序的可执行字节码。要存储和修改其他数据,必须创建新账户。这些账户通常称为“数据账户”。
数据账户可以存储所有者程序代码中定义的任意数据。
<!--EndFragment-->
<!--StartFragment-->
请注意,只有[系统程序]才能创建新帐户。系统程序创建帐户后,即可将新帐户的所有权转让给其他程序。
换句话说,为自定义程序创建数据帐户需要两个步骤:
这个数据账户创建过程通常被抽象为一个步骤,但了解底层过程是有帮助的。
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!