本文介绍了Solana区块链中的账户模型,详细解释了账户的类型、创建方法以及与账户的交互方式,还涉及了如何支付租金和账户的所有权管理。
Solana 账户模型是 Solana 生态系统的关键部分,对于开发者来说,尤其是从其他区块链转型过来的开发者,理解它可能是最困难的概念之一。为了在 Solana 区块链上高效工作,深入理解账户模型非常重要。让我们首先定义什么是账户,并探索不同类型的账户以及如何创建和与它们交互。
账户是 Solana 区块链上存储数据的任何地方。Solana 区块链与其他区块链(如以太坊)相比的独特之处在于数据是如何存储和管理的。以下是不同的账户类别:
程序账户 - 这些账户存储可执行代码,相当于以太坊的智能合约。
存储账户 - 这些账户存储与程序相关的数据。
代币账户 - 这些账户跟踪账户的代币余额,并允许在账户之间转移或接收代币。
在 Solana 区块链中,程序与程序的数据/状态是分离的。两者被分配了独立的账户,但它们是相互关联的。与此相比,在以太坊中,智能合约及其数据位于区块链上的一个位置。如果你要创建一个计算程序进行代币转移次数的程序,你需要创建用于进行转移的程序,以及另一个账户来存储转移次数。
举个传统金融世界的例子,你可以将程序看作借记卡,将银行看作存储账户,将账户余额看作代币账户。虽然它们相互关联,但它们位于不同的地方。如果你丢失了借记卡,你并不会丢失银行账户(但可能会丢失账户中的资金)。你的卡也是唯一一张可以通过购买东西来改变账户余额的卡。同样,与存储账户关联的程序是唯一可以改变数据状态的程序。
Solana 区块链上有两种类型的账户:可执行和不可执行。程序是可执行账户,存储程序的不可变代码。程序代码首先用 Rust 或 C/C++ 编写,然后通过 LLVM 编译基础设施编译成字节码。
数据存储和代币余额存储在不可执行账户中,因为它们的数据可以被更改。为了控制谁可以更改这些数据,不可执行账户会分配一个所有者的程序地址。其他程序可以读取另一个账户的数据,但如果它们试图修改该数据,交易将失败。
不幸的是,将所有数据存储到单独的账户中并不是免费的,而是会产生一些成本。对开发者来说,幸运的是,这些成本以 租金(rent) 形式支付,以 lamports 为单位。Lamports 是 Solana 代币 SOL 的分数单位,用于在 Solana 区块链上进行微支付。租金费用是根据账户的存储大小计算的。存储的数据越多,租金费用越高。
租金费用在 Solana 区块链的每个 epoch 结束时收取。Epoch 是当前验证者仍然有效以生成交易区块的时间。你可以在 Solana Explorer 上查看当前和过去 epoch 的数据。
在撰写本文时,一个 epoch 大约持续 2 天。就像在现实生活中一样,如果账户余额为零且无法支付租金费用,它将被从区块链中移除。
账户可以通过在其代币余额中持有至少 2 年的租金来免租金。估计租金成本的一个简单方法是通过 Solana CLI 使用 solana rent 命令。通过提供账户的大小(以字节为单位),你将看到每字节、每个 epoch 的租金以及账户免租金所需的最低金额:
要在 Solana 上创建账户,客户端需要生成一个公钥和私钥对。然后,客户端使用 SystemProgram::CreateAccount 调用注册公钥并为此账户分配需要设置的数据存储大小。目前,这个大小之后无法更改,大小限制为 10 MB。如果需要更多大小,程序可以将数据从一个账户复制到容量更大的另一个账户。
在创建账户时,需要为该账户分配一个所有者。只有账户的所有者才能修改存储在账户中的数据。创建账户后的默认所有者称为“系统程序”。系统程序是 Solana 上的一个 原生程序,负责创建账户、分配账户数据并将账户的所有权分配给连接的程序。原生程序是 Solana 上所有验证者都需要运行的程序。
系统程序还负责为其拥有所有权的账户进行 lamport 转移。如果用户创建一个账户用于存储代币余额,则该代币的转移由系统程序处理。用户将使用他们的私钥签署转移指令,系统程序将负责从发送方扣除代币并将代币贷记到接收方账户。
由于程序代码和程序存储的数据是独立的账户,任何程序都可以读取另一个账户的数据。任何程序也可以向账户添加 lamport,但只有所有者才能减少它们。这在构建可能需要与不拥有的账户交互的程序时非常有用。
在读取账户时,你将看到返回的以下数据:
以下是这些数据的详细说明:
公钥 - 分配给该账户的公钥
余额 - 该账户拥有的 SOL 数量
所有者 - 拥有该账户所有权的程序地址
可执行 - 该账户是否为可执行账户
rent_epoch - 该账户下一次支付租金的 epoch
长度 - 账户的大小
在 Solana 上,创建和与账户交互是实现任何事情的关键。程序与其使用的数据的分离是代码和状态管理的独特方法。理解所有权规则以及程序在这些规则中的工作方式对于在 Solana 上成功开发非常重要。为了将这些概念付诸实践,请查看我们的一些 其他 Solana 教程。
订阅我们的 新闻通讯 获取更多文章和指南。如果你有任何反馈,请通过 Twitter 与我们联系。你还可以在我们的 Discord 社区服务器上与一些非常酷的开发者聊天 :)
- 原文链接: quicknode.com/guides/sol...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!