什么是 Solana 账户模型?
Solana 上的所有内容都可以视为一个帐户,而帐户是协议在区块链上“组织”数据的方式。本文将全面概述 Solana 帐户模型,包括类型和类别、帐户组件以及“租金”的概念。
什么是 Solana 账户以及它如何运作?
Solana 账户可以被视为存储桶,能够保存所有数据类型:从 SOL 等代币到程序的状态变量(例如整数、字符串、公钥),甚至整个程序本身。每个账户都有指定的所有者,单个所有者可以拥有许多不同的账户。
账户模型通常与计算机文件系统进行比较:

Solana 账户类型有哪些?
Solana 账户类型主要有两种:可执行账户和不可执行账户。这是因为 Solana 程序不像 以太坊智能合约那样存储状态,因此需要将两种类型的操作分开。
什么是可执行程序?
可执行程序由不可变代码组成,这些代码拥有并创建存储状态的其他帐户。该代码用Rust等语言编写,然后编译为 eBPF,这是一种字节码形式。
可执行程序最常见的例子是 Solana 的核心系统程序,它负责创建人们用来访问其代币和 NFT 的账户(钱包)。
什么是不可执行程序?
不可执行程序是“存储”账户,其中包含所有其他类型的数据,如程序变量、代币余额、NFT、可替代货币等。通过不可执行账户,协议反映了每次交易后发生的状态变化。
以太坊智能合约与 Solana 程序
智能合约预先构建了一个称为“存储”的特殊隔间,其中存储了其状态变量。然后,智能合约使用其可执行代码来修改这些状态变量。以太坊合约可以看作是可执行代码和不可执行代码共存的统一场所。
让我们以 USDC 代币为例。其合约包含一个名为“余额”的映射,将用户的地址映射到他自己的 USDC 金额。在发送或接收 USDC 代币时,合约会通过其可执行代码自行反映变化。
Solana 以不同的方式处理这个问题。有一个 USDC 代币程序,为每个代币持有者创建一个新账户。这些账户存储持有者的可用 USDC 金额。当用户传播交易时,USDC 代币账户会查找想要进行交换的用户的关联代币账户,然后在其中反映更改。

Solana 账户类别有哪些?
可执行账户和不可执行账户又可以分为本机程序、程序账户和数据账户等几个附加类别。
什么是可执行本机程序?
可执行本机程序是 Solana 生态系统的“原生”程序,负责维护和运行验证器节点等任务。此类型最著名的示例是系统程序,它负责创建新的系统帐户(我们通常称为“钱包”)、转移 SOL 等。本机程序的其他实例是Stake 程序,它负责质押机制,以及 BPF 加载器,它类似于以太坊的 EVM。
什么是可执行程序帐户?
可执行程序账户是预制的 Solana 程序,用于创建和存储其他程序。Solana程序库(SPL) 就是一个很好的例子,它是一组支持许多链上活动的程序,包括创建、交换和借出代币、生成权益池以及维护链上名称服务。SPL 的一个突出代表是代币程序,它创建和管理代币。
Solana 的 USDC 代币只是一个代币账户,由代币计划管理。但是,代币账户并不存储用户的代币余额。这由第三类账户的成员处理:数据账户。
什么是不可执行数据帐户?
虽然本机程序和程序账户被视为可执行文件,但数据账户则相反:它们是一个反映特定程序和整个 Solana 协议的状态变化的注册表。
数据账户可以分为:
- 代币账户——由代币计划创建的账户
- 关联代币账户 (ATA) - 存储每个用户代币余额的账户
- 系统拥有的账户——存储数据并允许签署交易
代币账户代表每种可替代货币(USDC、USDT 等),并包含代币的基本信息,如供应量、小数位数、名称等。每个唯一的代币账户都会生成一个不同的关联代币账户 (ATA)。例如,如果您同时拥有 USDC 和 USDT,您可以访问由 USDC 和 USDT 代币账户分别创建的两个 ATA。

Solana 账户元素是什么?
每个帐户元素都是一个元数据集,因此协议可以轻松了解帐户的类型和附加信息。元数据包括:
- lamports - 账户的 SOL 余额,以 lamports 计价,1 lamport 相当于十亿分之一的 SOL 代币
- 所有者-这是拥有该帐户的程序的地址
- 可执行文件- 一个布尔变量,指示帐户是否包含可执行代码
- 数据- 存储在帐户中的原始数据字节数组,可以是存储变量或可执行代码
- rent_epoch -表示账户下一个需要支付租金的时期
所有者和持有者之间的区别在于,所有者是控制账户的程序,而持有者是持有账户私钥的用户。例如,系统拥有账户由 Solana 的原生系统程序拥有。
Solana 账户租金是多少?
每个账户都需要支付一定的租金来使用区块链上的内存,这是一种预防措施,可以防止攻击者使用所有内存来堵塞网络。
为了让区块链满足所有用户的需求,它必须包含某种经济激励。这尤其适用于验证者,他们提供硬件和计算能力来验证所有交易。验证者需要维护所有状态更改的工作副本,并获得租金作为奖励。
账户中最低余额相当于 2 年租金的账户可免除租金。如果没有,则在交易引用时或每个纪元(目前相当于两天)收取费用。如果账户不包含免除租金的最低 SOL 金额,其数据将从链中删除。
如何创建 Solana 帐户
每次用户创建新“钱包”时, Solana 钱包都会在后台创建 Solana 上的系统帐户。钱包通过生成位于 ED25519 椭圆曲线上的 64 字节密钥对来创建新帐户。前 32 个字节是私钥,当用户想要创建交易并与其他帐户或程序交互时使用。第二组 32 个字节是钱包的公钥。
开始在 Solana 上构建
账户模型是 Solana 协议用来组织数据的系统。账户可以看作是存储桶,能够容纳所有内容——从原始数据、代码和状态变量到代币余额、NFT 等。账户主要有两种类型:可执行账户和不可执行账户。
本文由 SlerfTools 翻译自 What is the Solana Account Model?