---
title: "如何计算 Solana 程序的 rent"
description: "了解 Solana 的 rent 机制及如何为你的下一个 Solana 程序计算 rent"
---

# 如何计算 Solana 程序的 rent

Solana 区块链上的程序执行始于一笔交易。该区块链由一个计算机系统网络组成，这些系统在整个网络中复制并分发交易的数字账本。链上的每个区块包含若干笔交易，每位参与者的账本都会收到区块链上发生的每笔新交易的副本。

将所有这些数据存储在各个独立账户中并非免费，会产生一定的费用。本文将带你了解 Solana 上租金（rent）的概念以及如何计算它。

## **什么是 Solana 上的租金？**

**租金是每个 Solana 账户为在区块链上存储数据而支付的费用，以 Lamports 计价，Lamports 是 SOL 的最小单位，用于微支付。** 租金费用根据账户存储的大小计算。租金越高，存储的数据量就越大。

由于 [Solana 节点集群](https://www.alchemy.com/overviews/solana-nodes)必须主动维护这些数据，因此需要一种基于时间和空间的费用，来使账户及其数据在区块链上保持存活。所有 Solana 账户都必须使其 Lamport 余额保持在足够高的水平，以符合**租金豁免**资格，并继续留在 Solana 区块链上。被发现 Lamports 余额过低的账户将被垃圾回收机制从网络中移除。

### **租金费用何时收取？**

租金费用通常在每个 epoch 结束时收取。epoch 是指主导验证者仍能够生成交易区块的时间段。[Solana Explorer](https://www.alchemy.com/dapps/solana-explorer) 中包含最近一个及前一个 epoch 的数据。当账户被某笔交易引用时，也需要支付租金。

在每个 slot 结束时，账户已收取的租金中的一部分会被销毁，其余部分则支付给投票账户。[账户](https://www.alchemy.com/overviews/solana-account-model)如果余额不足以支付租金，将被释放并删除其数据。同样重要的是，新创建的账户必须是免租金的。

租金之所以重要，还因为网络上的验证者必须在内存中保留这一状态的工作副本；网络会为这种资源消耗收取基于时间和空间的费用。这是因为 Solana 上的账户可能具有由所有者控制的状态（Account::data），该状态独立于账户余额（Account::lamports）。

## **如何计算 Solana 程序的租金？**

使用 [Solana CLI](https://www.alchemy.com/docs/reference/solana-api-quickstart) 中的 solana rent 命令，可以简单地估算租金成本。只需输入账户大小（以字节为单位），即可查看每字节、每 epoch 的租金，以及账户免租所需的最低金额。

根据租金制度，账户的 **Account::rent epoch** 为当前 epoch 或当前 epoch \+ 1，且租金按一个 epoch 的时间计算。

如果账户处于豁免制度下，Account::rent epoch 只是简单地调整为当前 epoch。

如果账户不属于豁免范围，则使用 **Rent::due\(\)** 来确定该账户所欠的租金。这一计算基于下一个 epoch 与 Account::rent epoch 之间的差值。以下步骤将展示如何计算 Solana 程序的租金价格。

### **步骤 1：创建新程序**

首先，进入终端，使用 cargo 创建一个新文件夹，我们的主文件将存放在这里。

打开 src/main，并用[这里](https://gist.github.com/dharniel45/69bd889abd6179c9bfa94b00ab1247f6)的代码片段替换其内容。

### 步骤 2：计算租金成本

文件大小应为 906 字节，我们只需运行以下命令即可计算租金：

你应该会看到如下内容：

<ImageBlock
  src="https://media.alchemy.com/1703690153-solana-rent-command-output.png"
  alt="终端中 Solana Rent 命令的输出"
  width={984}
  height={172}
  caption="终端中 Solana Rent 命令的输出"
/>

最后需要说明的是，租金扣除并没有对应的匹配交易，因为租金收取是按照协议层面的账户变更（例如向验证者分配租金）来进行的。

因此，租金收取在很大程度上是不可见的，只能通过最近的一笔交易，或者根据账户地址前缀所指定的时间来间接观察到。

## **如何取回 Solana 存储费用**

要取回 Solana 存储费用，开发者和普通 Solana 用户可以关闭账户以取回其存储费用。取回 Solana 租金费用最简单的方法，是使用像 **[Sol Incinerator](https://www.alchemy.com/dapps/sol-incinerator)** 这样对用户友好的工具，来关闭钱包中未使用的程序账户。

## **结语**

目前的租金成本是在创世阶段设定的，但未来计划使其变为动态的，以反映底层硬件存储的当前成本。因此，人们普遍认为，随着技术的进步和硬件成本的下降，租金费用也会随之降低。
