阅读时间 5 分钟
概述
“租金”是Solana 区块链上的一种机制,旨在确保区块链资源的高效利用。该机制要求账户维持与网络上存储数据量成比例的最低余额。未能维持该最低余额的账户将被从账本中移除,以释放存储空间。您可以将其视为类似于银行账户。对于许多银行账户而言,如果未维持最低余额,银行会向您收取费用。 如果您的余额低于规定的最低限额,银行可能会向您收取费用或关闭您的账户。Solana 的租金就像最低余额要求一样,确保网络上的账户拥有足够的lamports(1 lamport等于10亿分之一的SOL)来支付网络存储成本。如果某个账户的余额低于免租门槛,该账户可能会被移出网络。租金可退还。如果账户被关闭(从网络中移除),其数据将从区块链中删除,租金将退还给账户所有者(或其他指定账户)。
Solana 协议向账户持有人收取租金,用于:
- 通过删除不再活跃的账户,鼓励高效利用存储空间。
- 向验证者支付报酬,以补偿其为存储账户数据所提供的资源。
由于创建新账户需要支付租金,因此在创建账户之前,您必须了解租金豁免门槛。这样您才能向账户中注入足够的lamports,以满足最低要求。在本指南中,您将学习三种计算账户租金豁免门槛的方法。
您将负责的工作内容
在本指南中,您将通过三种方法计算某账户的租金免税门槛:
- Solana CLI
- Solana Web3.js 库
- 锚点的空间限制
您需要准备的物品
在继续操作之前,请确保已安装所需的依赖项:
- Solana 基础知识
- Solana 已安装 CLI最新版本
- 已安装Node.js(版本 16.15 或更高)
- 具备基本的 JavaScript 经验
- 一款现代网络浏览器(例如Google Chrome)
- 使用Anchor 的经验对本指南中的某一部分会有帮助,但并非必需
如何计算租金豁免门槛
免租门槛是根据账户大小(以字节为单位)计算得出的。在这些示例中,我们将假设一个包含 16 字节数据的简单账户,不过您可以将此值替换为您希望作为范围的任何账户大小。
方法 1 -Solana 命令行界面
计算租金豁免门槛最简单的方法是使用 Solana CLI. 您可以使用 solana 租金 用于计算给定账户规模下租金豁免门槛的命令。在终端中,运行以下命令:
solana 租金 16
这将计算一个包含 16 字节数据的账户的租金豁免门槛。输出结果如下:
租金豁免下限: 0.00100224 SOL
这意味着,一个包含 16 字节数据的账户必须至少拥有 0.00100224 SOL,才能避免该账户被移出网络。您可以修改此查询,以计算任意账户大小的免租门槛。
方法 2 -Solana Web3.js 库
若要使用Solana-Web3.js计算租金,请使用 获取租金减免所需最低余额 方法。该方法以字节为单位的账户规模作为参数,并返回以lamports为单位的免租门槛。让我们创建一个新的 Node.js 项目,并安装Solana-Web3.js 库:
mkdirsolana-rent
cdsolana-租
npm init -y # 或 yarn init -y
npm 安装 @solana/web3.js@1 # 或使用 yarn add @solana/web3.js@1
echo > index.js
这将创建一个新的 Node.js 项目,并安装Solana-Web3.js 库。接下来,让我们将以下代码添加到 index.js:
const { Connection, clusterApiUrl, LAMPORTS_PER_SOL } = require('@solana/web3.js');
const 连接 = new Connection(clusterApiUrl('mainnet-beta'), '已确认');
(async () => {
const dataSize = 16; // 请替换为所需的账户大小(单位:字节)
const minBalance = await connection.getMinimumBalanceForRentExemption(数据大小);
console.log(`Rent-exempt minimum: ${minBalance / LAMPORTS_PER_SOL} SOL`);
})();
我们在此处正在建立与Solana mainnet 集群的连接,然后调用 获取租金减免所需最低余额 方法。该方法以账户规模(单位:字节)作为参数,并返回免租门槛(单位:lamports)。然后,我们将结果除以 LAMPORTS_PER_SOL 将 lamports 转换为 SOL,并将结果输出到控制台。
在终端中,运行以下命令以执行该脚本:
node index.js
输出结果应如下所示:
租金豁免下限: 0.00100224 SOL
干得不错!
方法 3——锚点中的空间限制
使用 锚 框架中,您可以使用 空格 用于自动计算您新账户所需租金豁免门槛的限制条件。该 空格 该约束用于指定账户大小(以字节为单位)。
该 “Hello World”示例程序 在Solana 上,“Playground” 是一个很好的示例,展示了如何使用该 空格 约束条件。
如果您想运行该程序,完整的程序链接已在上面提供,但让我们先关注 初始化 结构体:
#[derive(Accounts)]
pub struct Initialize<'info> {
#[account(init, payer = signer, space = 8 + 8)]
pub new_account: Account<'info, NewAccount>,
#[account(mut)]
pub signer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[账户]
pub 结构体 NewAccount {
数据: u64
}
该 初始化 struct 定义了 初始化 函数。它包含该函数成功执行所需的账户和程序引用。该 空格 约束被应用到 new_account 位于……内的字段 初始化 使用结构体来指定新对象的大小 NewAccount 以字节为单位。
该 NewAccount struct 表示正在创建的新账户的状态。在此情况下,它包含一个 数据 类型字段 u64,它占用了 8 字节的存储空间。在 初始化 结构体分配了额外的 空格 用于账户标识符(8字节),因此账户总大小为16字节。
当 初始化 上下文被传递到 初始化 函数,Anchor 会自动确保该 new_account 该账户初始化时会预留足够的lamports,以满足包含16字节数据的账户的免租门槛。这笔费用由交易的签名者支付。
总结
干得漂亮!既然你已经了解了Solana 上的租金运作机制,就可以开始构建自己的程序和dApp了!查看我们的其他指南,继续学习:
我们非常期待了解您正在开发的内容。欢迎在Discord 上给我们留言,或者在Twitter上关注我们,随时掌握最新动态!
