帐户租金
在 Solana 的账户模型中,有一个特殊的概念叫做“租金” 。租金不同于交易费。用户支付租金以在 Solana 区块链上存储数据,而交易费则用于在网络上处理指令。
与以太坊不同,Solana 向其网络上的账户收取存储数据状态的费用,即租金。如果账户无力支付租金,系统将删除该账户,以减少不再维护的数据的存储成本。如果账户中的资产超过两年租金的最低余额,则可以免交租金。Solana 上的租金存储成本为每字节 0.00000348 SOL,典型的钱包数据大小为 372 字节/年,要求每个活跃的钱包持有者维护 0.0026 SOL。
账户类型
- 用户账户:普通钱包用户,类似于以太坊的外部自有账户(EOA)。
- 程序帐户:执行特定任务的帐户,存储程序的二进制文件。我们将在接下来的部分中进一步探讨这一点。
- PDA(程序派生地址):这些账户存储程序的状态,即程序执行期间存储的数据。这是一个类似于以太坊状态的概念,但在这里,它被分成单独的账户。下一部分将专门介绍这一点。
- ATA(关联代币账户)账户:这些是与特定 SPL(Solana 程序库)代币相关联的账户,允许用户方便地管理他们持有的代币。
账户定义
我们先通过账户的定义来回顾一下 Solana 账户的概念:
pub struct Account { /// Balance3 pub lamports: u64, pub data: Vec<u8>, pub owner: Pubkey, /// Whether it's an executable account7 pub executable: bool, /// Next epoch for rent collection9 pub rent_epoch: Epoch, }
- lampors:代表账户余额。Lamport 是 Solana 中的基本货币单位,类似于以太坊的wei 。
- data:表示存储的内容,是一个字节数组,可以包含任意类型的数据,比如程序状态、用户资产信息、存储程序的字节码等。
- 所有者:表示拥有或管理该账户的程序的公钥。它表示哪个程序有权操作该账户。如果账户包含可执行数据,则所有者表示加载该账户的程序。
- executable:表示帐户是否可执行。如果为true ,则表示帐户中的数据可执行,使其成为程序帐户。如果为false ,则该帐户用于存储常规数据,而不是可执行代码。
- rent_epoch:表示下一个从账户中扣除租金的期间。Solana 使用租金机制来防止账户无限期地被占用而不使用,从而避免状态膨胀。