如何计算 Solana 程序的租金
Solana 上的程序执行始于一笔交易。该区块链由一组计算机系统组成,它们复制并分发整个网络的数字交易分类账。链上的每个区块包含多个交易,并且每个参与者的分类账都会收到区块链上发生的每笔新交易的副本。
在单独的账户中存储所有这些数据并不是免费的,会产生一定的费用。在本文中,我们将为您介绍 Solana 上的租金概念以及如何计算它。
Solana 上的租金是什么?
租金是每个 Solana 账户在区块链上存储数据时需支付的费用,以 Lamports 计价。Lamports 是 SOL 的最小单位,通常用于微支付。租金费用的计算基于账户存储的大小,存储的数据越多,租金就越高。
由于 Solana 节点集群需要持续维护这些数据,因此需要基于时间和空间的费用来保持账户及其数据在区块链上存活。所有 Solana 账户必须保持足够高的 Lamport 余额,以符合租金豁免要求,并确保账户在 Solana 区块链上持续存在。余额过低的账户将被垃圾回收机制从网络中移除。
何时收取租金费用?
租金费用通常在每个 Epoch(纪元)结束时收取。Epoch 是指领先验证者仍能够生成交易区块的一段时间。Solana Explorer 记录了最近和过去 Epoch 的相关数据。此外,当账户被交易引用时,也会支付租金。
在每个 Slot(时隙)结束时,账户所支付租金的一部分会被销毁,而剩余部分将支付给投票账户。如果账户余额不足以支付租金,该账户将被释放,数据也会被删除。此外,需要注意的是,新的账户必须是免租金的。
租金的作用非常重要,因为网络中的验证者必须在内存中维护这些账户的状态副本。由于 Solana 账户的状态(Account::data
)可以由账户所有者控制,并且与账户余额(Account::lamports
)是分开的,因此网络会基于时间和空间的使用情况收取相应的租金费用。
如何计算 Solana 程序的租金?
使用 Solana CLI 中的 solana rent
命令可以轻松估算租金成本。您可以输入账户的大小(以字节为单位),然后查看每字节的租金、每个 Epoch 的租金以及账户免租所需的最低金额。
根据租金机制,账户的 Account::rent_epoch
通常设为当前 Epoch 或当前 Epoch +1,并且租金以一个 Epoch 的时间为单位计算。
如果账户符合免租条件,则 Account::rent_epoch
直接调整为当前 Epoch。
如果账户不符合免租条件,则会使用 Rent::due()
来计算该账户需要支付的租金。此计算基于下一个 Epoch 与 Account::rent_epoch
之间的差值。以下步骤将指导您如何计算 Solana 程序的租金。
第一步:创建新程序
首先,打开终端并使用 cargo
创建一个新文件夹,这将是存放主文件的目录。
然后,打开 src/main
文件,并将其替换为以下代码片段。
第二步:计算租金成本
该文件的大小应为 906 字节,我们可以通过运行以下命令来计算租金:
solana rent 906

您应该会看到以上内容。
最后,由于租金收取是根据协议级别的账户修改(例如向验证者分配租金)进行的,因此不会有对应的交易记录显示租金扣除。
因此,租金收取在很大程度上是不可见的,仅能通过最近的交易或通过账户地址前缀指定的时间间接观察到。
如何赎回 Solana 存储费用
为了取回 Solana 存储费用,开发者和普通用户可以关闭账户,以收回其存储费用。最简单的方法是使用用户友好的工具,例如 Sol Incinerator,来关闭钱包中未使用的程序账户,从而赎回租金费用。
结论
当前的租金成本是在创世时设定的,但未来计划调整为动态机制,以反映底层硬件存储的当前成本。因此,普遍认为,随着技术进步和硬件成本的下降,租金费用也将随之降低。
本文由 SlerfTools 翻译自 How to Calculate Rent for Solana Programs