什么是 Solana 上的租金?完整指南
Learn what Solana rent is: a refundable SOL deposit for account storage, not a recurring fee. Understand rent exemption and how to reclaim locked SOL.
准确性说明:网络性能、验证者数量、费用、协议功能、钱包支持和第三方集成随时间而变化。请将过时的数字视为历史快照,并核实当前的原始文档。
什么是 Solana 上的租金?它是与持久链上存储相关的账户余额机制。当前的账户创建规则、租金豁免、回收行为和弃用字段必须根据实时运行环境和当前文档进行验证。
快速摘要
- Solana 上的租金是可退还的 SOL 押金,而不是持续收取的费用。
- 每个链上账户都需要最低 SOL 余额才能保持活跃状态。
- 大多数钱包会自动为新账户注入达到租金豁免状态的资金。
- 租金豁免余额和账户关闭规则应根据当前运行环境进行检查。
- 您可以 通过关闭不使用的代币账户来收回锁定的 SOL。
- 定期租金收取出现在较旧的文档中;在没有当前原始资料确认的情况下,不要依赖“周期零 (Epoch Zero)”标签。
此内容仅用于教育和信息目的。它不构成财务建议、投资建议,也不构成买入、卖出或持有任何加密货币或数字资产的建议。
什么是 Solana 上的租金?(快速回答)
Solana 上的租金是每个链上账户为在 Solana 区块链上保持活跃状态而必须持有的可退还 SOL 押金。该押金不是经常性费用;它由协议持有,并在账户关闭时全额退还。大多数用户从不主动管理租金,因为像 Phantom 和 Solflare 这样的钱包会自动为新账户注入所需的最低余额,这就是为什么您可能会在没有明确授权的情况下注意到少量的 SOL 扣除。
“租金”这个词在这里确实容易引起误解。它听起来像是一张月度账单。请将其视为押金:您存入 SOL 以占用网络空间,并在离开时取回每一分钱。您的 SOL 并没有被花掉;它只是被占用了。
有关完整的技术规范,请参阅 关于租金的 Solana 官方文档.
为什么 Solana 会有租金机制?
Solana 验证者必须将每个活跃账户的数据存储在 RAM 中,以每秒处理数千笔交易,而硬件成本是真实存在的。验证者是运行 Solana 网络、处理交易并维护账本的节点。与磁盘存储不同,大规模的 RAM 是昂贵的,验证者必须将所有活跃账户数据加载到内存中以实现 Solana 的吞吐量。将每个账户占用存储的权利与与其大小成正比的最低 SOL 余额挂钩,可以使这些 RAM 需求保持在有限范围内。
如果存储没有成本机制,任何人都可以无限制地创建账户并免费填充数据。这就是状态膨胀问题:链上状态的总量,即验证者必须加载到内存中的所有数据,将无限制增长,从而使节点运营集中在资金雄厚的运营商手中,并降低每个人的网络性能。租金押金确保占用验证者存储空间的账户拥有与其存储占用空间成正比的经济质押。
Solana 联合创始人 Anatoly Yakovenko 将此机制设计为协议原始架构的一部分,专门用于防止这种无限制的增长。
租金是与验证者内存成本挂钩的存储押金。它不是支付给 Solana Labs 的费用,其运作方式也不像以太坊的 Gas 费,这是在下面的对比章节中解决的一个常见误解。
协议注意: 较早的 Solana 文档描述了从非豁免账户中定期收取租金的情况。当前的账户创建和租金豁免行为必须对照实时运行环境进行检查。不要仅从账户数量推断出锁定的 SOL 固定金额或任何价格影响。
Solana 租金的运作方式:存储押金模型
Solana 将每一条链上数据(从您的代币余额到您的 NFT 所有权记录)存储在称为账户的离散结构中。
存储押金类比
将租金想象成储物柜的可退还押金:押金保留您的空间,您在腾空时拿回押金,提前全额支付意味着您无需每月支付费用。
当您租赁一个储物柜时,只要您占用该空间,设施就会持有您的押金。您并没有损失这笔钱;它存放在托管账户中。当您清理完毕并归还钥匙时,您将拿回押金。Solana 租金的工作方式相同。您的 SOL 押金占用网络账本上的空间,并在账户关闭时全额退还。
一个关键区别:与按月付费的储物柜不同,Solana 使用一次性押金模型。一次性为账户注入达到租金豁免最低额度的资金,只要账户保持开启状态,就无需进一步支付。押金以 lamports(SOL 的最小单位;1 SOL 等于 1,000,000,000 lamports)衡量,尽管出于日常目的,您会看到以 SOL 报价的金额。
为什么每个代币都需要自己的账户
Solana 上的每个代币余额都占用这些账户中的一个空间,每个 NFT 记录和每段程序状态也是如此。这些账户中的每一个都需要最低 SOL 余额才能保持开启。
在以太坊上,钱包的所有代币余额都在单个地址内跟踪。Solana 的工作方式则不同。您持有的每个同质化代币都需要自己专属的 SPL 代币账户(Solana 程序库标准的链上代币存储,类似于以太坊上的 ERC-20 代币账户)。当您第一次收到某种代币时,系统会创建一个新账户来保存钱包中该特定代币的余额。该账户会自动附加一笔 SOL 押金。这就是为什么当您第一次收到以前未持有过的代币时,会看到少量的 SOL 扣除。
具体来说:持有 10 种不同的代币意味着 10 个独立的代币账户,每个账户大约需要 0.002 SOL 作为租金豁免押金。这大约有 0.02 SOL 被锁定在这些账户中,如果您以后关闭这些账户,这些资金都是可以全额收回的。
Solana NFT 也遵循同样的模式。每个 NFT 都存在于它自己的账户中,其中 NFT 的元数据、图像引用和所有权数据占用的存储空间需要租金豁免押金。铸造一个 NFT 会同时创建几个账户(铸造账户、代币账户、元数据账户),每个账户都有自己的押金,这就是为什么铸造比标准交易花费的 SOL 略多的原因。
与 Solana 上的 DeFi 协议互动(例如借贷平台、去中心化交易所或收益保险库)通常会创建多个带有租金押金的账户。如果您使用过其中任何一个,您可能有部分锁定的 SOL 分散在这些账户中。
包括 Phantom 和 Solflare 在内的钱包会自动处理账户创建和注资。有关底层架构的更多详细信息,请参阅 Solana 账户模型文档.)。对于代币标准本身,请参阅 SPL 代币文档.)
租金豁免:账户注资的运作方式
当账户根据当前协议规则持有其数据大小所需的 lamport 余额时,该账户即被视为免租金。状态和所需金额应与当前运行时文档进行核对,而不是视为永久性协议保证。
什么是租金豁免?
租金豁免是账户满足其数据大小所需阈值时获得的的状态。在当前模型下,该余额不会被周期性地作为租金费用消耗。协议行为可能会演变,因此开发者应查询相关集群的当前要求。
免租金并不意味着没有 SOL 被锁定。这笔 SOL 存款是您的钱包代表账户持有的真实 SOL。它的意思是这笔存款不会被消耗。它在账户的整个生命周期内保持不变,并在账户关闭时退还给您。
常见的钱包和应用程序流程通常会为新创建的账户充值到所需阈值,但用户应验证单个账户和交易说明,而不是假设每个钱包或应用程序的行为都相同。
租金豁免需要多少 SOL?
标准 SPL 代币账户的最低余额约为 0.00203928 SOL(2,039,280 lamports)。确切金额取决于账户的数据大小:数据大小为 0 字节的系统账户需要较少,而具有更多数据(如自定义程序账户)则需要相应更多的 SOL。
协议准确性说明:在使用 getMinimumBalanceForRentExemption) 查询当前 Solana 主网的确切数字,然后再做出技术或财务决策。协议参数可能会通过网络治理进行更改。
下表提供了常见账户类型的近似参考数据:
| 账户类型 | 近似数据大小 | 所需最低 SOL(近似值) |
|---|---|---|
| 系统账户(钱包) | 0 字节 | ~0.00089 SOL |
| SPL 代币账户 | 165 字节 | ~0.00204 SOL |
| NFT 铸币账户 | 82 字节 | ~0.00144 SOL |
| 自定义程序账户 | 视情况而定 | 按数据大小计算 |
所有数字均为近似值。在依赖这些数字进行生产用途之前,请使用当前 Solana 主网上的 getMinimumBalanceForRentExemption 进行验证。
开发者须知 要以编程方式计算确切的最低余额:
- 调用
connection.getMinimumBalanceForRentExemption(dataSize),其中dataSize是账户分配的大小(以字节为单位)。- 该方法封装了公式:
minimum_balance = (128 + data_size_bytes) × rent_rate_per_byte × two_years_of_epochs。- 创世设置的租金费率为每字节每年 3,480 lamports。
- 在为新账户充值时,将返回的 lamport 值直接传递给
SystemProgram.createAccount。在生产中使用之前,请与 Solana 开发者文档) 验证当前费率。
Solana 账户没有 SOL 了会怎样?
常见的钱包和应用程序流程通常会为新账户充值到所需阈值,但用户应验证具体说明和账户,而不是假设每个实现的行为都相同。
账户垃圾回收
早期的租金设计包括非豁免账户的回收或账户删除行为。在将垃圾回收描述为实际风险之前,应验证当前的运行时规则和账户创建要求。
不要假设仅仅降低账户余额就会导致删除或代币丢失。账户所有权、程序规则、关闭权限和当前的租金豁免执行决定了可能发生的情况。检查实时账户和运行时,而不是依赖旧的通用场景。
历史文档描述了从非豁免账户中定期扣款。在应用这些旧描述之前,应从主要文档中验证当前的账户创建和运行时行为。
常见的钱包和应用程序流程通常使用所需的余额创建账户,但用户应验证各个账户,而不是依赖通用的钱包保证。账户关闭是另一项单独的操作,下面将进行介绍。
普通用户需要担心租金问题吗?
对于许多 Solana 用户来说,账户充值由钱包和应用程序流程处理,但账户关闭和开发者管理的账户仍然需要小心。
许多钱包会尝试为新创建的账户充值到所需的最低额度,但用户不应将钱包名称视为安全保证。在转移或关闭任何内容之前,请验证账户余额、所有者程序、代币数量和当前的租金豁免要求。
值得采取行动的一种情况是:如果您积累了许多来自不再持有的代币、从未认领的空投或不再活跃的 NFT 项目的空代币账户,这些账户将以少量 SOL 存款被锁定。这些存款是完全可回收的。请参阅如何收回锁定的 SOL 以获取步骤。
如何收回租金:从未使用过的账户中取回您的 SOL
符合条件的空代币账户可以在根据监管代币程序关闭时退还其剩余的 lamports。关闭账户并非没有风险:在签署交易之前,请验证程序、余额、授权、目的地和交易。
您曾经持有的每种 SPL 代币都需要自己的链上账户,而这些账户中的每一个都持有约 0.002 SOL 作为免租金押金。
当一个代币的余额因您出售、转移或项目归零而变为零时,账户不会自动关闭。它会在账本上保持打开状态,您锁定的 SOL 存款仍在其中等待。在您明确关闭账户之前,网络没有理由退还该 SOL。
拥有 50 个空代币账户的钱包会在这些账户中锁定约 0.1 SOL。按典型的 SOL 价格计算,这是 15 到 20 美元闲置资金,并且可以免费完全收回。
关闭代币账户可以将其剩余的 lamports 退还到指定目的地,但首先要验证代币余额是否为零,地址和授权是否正确,以及钱包指令是否包含其他无关操作。将来接收同一代币可能需要一个新的关联代币账户和另一个账户创建押金。
安全提示:在连接任何钱包或投资组合工具之前,务必验证您使用的是官方版本。第三方应用程序会与您的钱包互动;请仅使用您信任且可以验证的应用程序。
方法 1:Phantom 钱包(内置,无需第三方连接)
- 打开 Phantom 并导航到您的代币列表。
- 识别显示零余额的代币。
- 选择代币,然后从选项菜单中选择“关闭账户”或“销毁并关闭”。
- 确认交易。SOL 存款将立即退还到您的主余额。
方法 2:Step Finance(批量关闭多个账户)
- 前往 Step Finance 并连接您的钱包。
- 导航到投资组合管理器仪表板的“空账户”部分。
- 查看可关闭账户列表以及每个账户可收回的 SOL 金额。
- 选择要关闭的账户并确认交易。
方法 3:Solana Beach 或 Solscan(只读识别)
- 打开 Solana Beach 或 Solscan 并输入您的钱包地址。
- 浏览您的代币账户以识别余额为零的账户。
这两个浏览器都不执行直接关闭。识别账户后,请使用 Phantom 或 Step Finance 完成交易。仅关闭代币余额为零的账户;持有活动代币的账户在转移或销毁余额之前无法关闭。
开发者须知 要以编程方式关闭账户,请使用 Token Program 的
closeAccount指令。在调用closeAccount之前,账户必须具有零代币余额;否则交易将失败。已关闭账户的 lamports 将转移到您指定的目的地账户。有关完整指令参考,请参阅 SPL Token 文档。
Solana 租金变更和当前运行时行为
现代 Solana 账户创建流程通常需要足够的 lamports 来豁免租金,而旧的定期收取租金的描述可能不再符合当前运行时行为。已弃用或哨兵 rent_epoch 字段本身并不能证明账户可以忽略最低余额要求。
开发者应使用 getMinimumBalanceForRentExemption 查询当前最低要求,确认活动的运行时行为,并在相关集群上测试账户的创建和关闭。用户不应关闭账户,除非他们了解所有者程序、代币余额、授权方以及回收的 lamports 的目的地。
Solana 租金与以太坊 Gas 费:主要区别
Solana 租金和以太坊 Gas 费是根本上不同的机制,它们恰好共享“网络成本”的标签。
| 特征 | Solana 租金 | 以太坊 Gas |
|---|---|---|
| 目的 | 链上账户空间的存储押金 | 交易执行的计算费用 |
| 何时收费 | 账户创建时一次性收取 | 每次提交交易时收取 |
| 可否退还? | 是,在账户关闭时全额退还 | 否;Gas 费被消耗且不可退还 |
| 持续成本? | 否;豁免租金的账户没有经常性收费 | 是;每笔交易都需要 Gas 费 |
| 金额 | 由基于账户数据大小的公式确定 | 可变,由网络需求决定 |
| 用户控制 | 由协议设定;用户不可调整 | 用户可以设定 Gas 限额和价格 |
| 覆盖范围 | 存储空间(验证节点上的字节) | 计算(执行的 CPU 周期) |
如果您来自以太坊,您可能会将租金映射到 Gas 的思维模型:一种按交易计费的成本,它会消耗 SOL,就像 Gas 消耗 ETH 一样。这种映射是不正确的。租金和 Gas 目的不同,收费时间和经济行为也不同。
Solana 自己的交易费用涵盖了计算成本,这与租金是分开的。不要将租金与 Solana 的交易费用混淆;它们是独立的机制。
以太坊 Gas 费是一种消耗性成本:您支付它们,它们就消失了,计入 EIP-1559 费用销毁或作为优先费支付给验证者。Solana 租金是一种可逆的押金:您持有它而不是花费它,并在账户关闭时将其收回。这种区别解释了为什么从两个网络之间转移的用户会觉得 Solana 的成本模型在结构上有所不同。
比特币采取了不同的架构方法。比特币使用 UTXO(未花费交易输出)模型而不是账户模型,并且没有租金机制,因为未使用的 UTXO 只是保持未花费状态,而不会占用 Solana 账户所需的那种索引存储。
Solana 租金:开发者参考
以下参考指南是为构建 Solana 的开发者编写的;普通用户可以跳到常见问题解答部分,而不会错过日常使用所需的任何信息。
开发者须知 以下所有示例均引用 Solana web3.js v1.x。v2.x API(目前已发布)使用不同的方法签名。在使用这些示例生产部署之前,请查看 官方 web3.js 迁移指南。
程序和租金: Solana 程序(相当于以太坊上的智能合约)本身作为账户存储,并受相同的租金规则约束。已部署的程序必须维持豁免租金的余额。程序账户通常在部署期间会被充值至豁免租金状态。在 Solana 上,程序是无状态的;它们写入独立的程序数据账户,每个账户都有自己的租金要求。
程序派生地址 (PDA): PDA 是地址根据程序 ID 和种子确定性派生的账户,由程序而非私钥拥有。PDA 受用户所有账户的相同租金豁免要求约束。拥有 PDA 的程序负责确保其资金充足,达到豁免租金的最低要求,通常在通过跨程序调用 (CPI) 创建账户时完成。资金不足的 PDA 是 Solana 程序中生产错误的常见来源。
计算豁免租金的最低余额: 使用 connection.getMinimumBalanceForRentExemption(dataSize),其中 dataSize 是账户分配的数据大小(以字节为单位)。这将返回当前的 lamports 数额。在为新账户充值时,将结果直接传递给 SystemProgram.createAccount。
以编程方式关闭账户: 使用 Token Program 的 createCloseAccountInstruction 来关闭代币账户并将其 lamports 退还给指定的目的地。账户必须具有零代币余额;否则交易将失败。
| 操作 | 方法 | Solana web3.js v1.x 调用 |
|---|---|---|
| 检查最低余额 | getMinimumBalanceForRentExemption | connection.getMinimumBalanceForRentExemption(size) |
| 创建豁免租金账户 | SystemProgram.createAccount | SystemProgram.createAccount({...lamports: minBalance...}) |
| 关闭代币账户 | Token Program closeAccount | createCloseAccountInstruction(account, dest, owner) |
完整参考:Solana 账户模型文档.
关于 Solana 租金的常见问题解答
以下问题涵盖了关于 Solana 租金最常见的混淆点,并提供独立的答案供直接参考。
什么是 Solana 租金?
Solana 租金通常被描述为链上账户在其分配数据下根据当前规则必须持有的 lamport 余额。当一个符合条件的账户被有效关闭时,其剩余的 lamports 将发送到关闭指令指定的目的地。钱包通常会自动为账户充值,但用户仍应核实指令和当前要求。
当 Solana 账户被创建时,它通常必须根据其分配的数据大小持有最低的 lamport 余额。在当前规则下,达到该阈值可使账户免于定期扣除租金。有效的关闭操作会将账户的剩余 lamports 发送给指令指定的目的地。
租金豁免是账户在其 lamport 余额满足或超过其数据大小的当前阈值时所拥有的状态。在当前模型下,余额不会被定期收取租金;开发者应验证当前的运行时行为,而不是将其视为一项永久保证。
对于标准的 SPL 代币账户,大约需要 0.00203928 SOL(2,039,280 lamports)。确切金额取决于账户的数据大小:数据大小为 0 字节的系统账户需要更少(约 0.00089 SOL),而具有更多数据的自定义程序账户则需要相应更多。在依赖这些数字之前,请在 Solana 主网使用 getMinimumBalanceForRentExemption 验证当前数字。
旧文档描述了对非豁免账户的租金收取和账户清理。当前的 Solana 账户创建要求和运行时行为可能有所不同。请查询实时账户和当前文档,而不是假设账户将被删除或钱包已将其设置为安全状态。
是的。关闭账户时,全部租金押金将退还到您的钱包。关闭账户以取回 lamports 仅在相关程序和账户状态允许的情况下进行。确认账户为空,验证目标地址和权限,并在签名之前审阅每一笔交易。命名的钱包和仪表板仅为示例,并非认可。
Solana 的租金机制解决了什么问题?
验证者必须将每个活动账户的数据保存在 RAM 中,才能处理高吞吐量的交易。如果没有与存储相关的成本机制,任何人都可以创建无限的账户,导致网络状态无界增长并推高验证者的硬件成本。租金押金确保消耗验证者存储的账户对其占用的空间负责。
Solana 的租金与以太坊的 Gas 费有何不同?
以太坊 Gas 费是每笔交易支付的不可退还的计算成本;它们涵盖 CPU 周期并立即消耗。Solana 的租金是每个账户支付一次的可退还存储押金;它涵盖验证者上的字节存储,并在账户关闭时全额退还。这两种机制在架构上不同的协议中服务于不同的目的。
探索 Bybit 上的 SOL
读者可以查阅 当前 SOL 市场信息) 或 SOL/USDT 现货市场.)。这些链接提供市场访问,并不证明 Solana、钱包或第三方协议适合每一位读者。
主要收获:您需要了解的关于 Solana 租金的信息
Solana 租金通常被理解为一种账户资助要求,而不是一种经常性用户费用,受当前运行时规则的约束。
- Solana 账户通常持有其分配数据所需的 lamports;符合条件的关闭操作会将剩余的 lamports 发送到指定目的地。
- 每个链上账户都需要最低 SOL 余额,该余额与其数据大小成比例,以保持活动状态。
- 常见的钱包和应用程序通常会创建具有所需余额的账户,但每个账户都应单独验证。
- 旧的定期租金和垃圾回收描述不应在未获得主要来源确认的情况下应用于当前运行时。
- 免租金状态意味着押金不会被提取,而不是没有 SOL 被锁定。
- 空的代币账户在根据代币程序的规则关闭时,可能会退还其免租金余额。在签名之前,请验证账户、权限、目的地、交易费用和工具权限。
对于普通用户,请在关闭账户之前确认账户为空且符合条件。对于开发者,请查询当前的免租金要求,并在相关集群上测试创建和关闭。不要将钱包自动化、旧的租金描述或账户计数估计视为安全或代币经济学的保证。
本文中引用的 SOL 余额、租金费率和协议参数反映了在发布日期之前公开记录的 Solana 网络行为。协议参数可能通过网络治理或软件升级而改变。读者在做出技术或财务决定之前,应在官方 Solana 文档中验证当前值。