什么是Solana账户模型?

  • Alchemy
  • 发布于 2023-02-03 15:43
  • 阅读 15

本文深入探讨了Solana账户模型,包括账户的定义、类型及其运作机制。文章通过与以太坊智能合约的比较,阐述了可执行程序与非可执行程序的区别以及账户的各种分类和组成元素。此外,还介绍了Solana账户的租金机制和创建方法,提供了全面的技术理解与应用视角。

在 Solana 上的一切都可以被视为一个账户,账户是协议“组织”区块链上数据的方式。本文将全面概述 Solana 账户模型,包括类型和分类、账户组成部分以及“租金”的概念。

什么是 Solana 账户,如何工作?

Solana 账户可以被看作是存储桶,可以容纳每种数据类型:从例如 SOL 这样的代币到程序的状态变量(例如整数、字符串、公钥),甚至整个程序本身。 每个账户都有一个指定的所有者,单个所有者可以拥有多个不同的账户。

账户模型通常被比作计算机文件系统:

计算机文件与 Solana 账户计算机文件与 Solana 账户

Solana 账户类型有哪些?

Solana 账户类型主要分为两种:可执行账户和不可执行账户。 这是因为 Solana 程序不同于以太坊智能合约那样存储状态,因此需要将两种类型的操作分开。

什么是可执行程序?

可执行程序由不可变代码组成,拥有和创建其他存储状态的账户。 这些代码是用类似 Rust 的语言编写的,然后编译成 eBPF,这是一种字节码形式。

可执行程序的最常见例子是 Solana 的核心系统程序,负责创建人们用来访问其代币和 NFT 的账户(钱包)。

什么是不可执行程序?

不可执行程序是“存储”账户,包含所有其他类型的数据,如程序变量、代币余额、NFT、可替代货币等。 通过不可执行账户,协议反映每个交易后发生的状态变化。

以太坊智能合约与 Solana 程序的比较

智能合约预先构建了一个特殊的部分,称为“ storage”,用于存储其状态变量。智能合约然后使用其可执行代码来修改这些状态变量。以太坊合约可以被视为可执行和不可执行代码共同存在的统一地方。

以 USDC 代币为例。它的合约包含一个称为“balances”的映射,将用户的地址映射到其自己的 USDC 数量。在发送或接收 USDC 代币时,该合约通过其可执行代码自动反映变化。

Solana 的处理方式有所不同。有一个 USDC 代币程序,为每个单独的代币持有者创建一个新账户。这些账户存储持有者的可用 USDC 数量。当用户发起交易时,USDC 代币账户查找想要进行交换的用户的相关代币账户,然后在其中反映变化。

Solana 的关联代币账户结构Solana 的关联代币账户结构

Solana 账户分类有哪些?

可执行和不可执行账户可以被细分为几种额外的分类,如原生程序、程序账户和数据账户。

什么是可执行的原生程序?

可执行的原生程序是“原生”于 Solana 生态系统的,负责如维护和运行验证者节点等任务。 这一类型最著名的例子是 System Program,负责创建新系统账户(我们通常所称为“钱包”)、转移 SOL 等。其他原生程序的实例包括 Stake Program,负责质押机制,以及 BPF Loader,类似于以太坊的 EVM。

什么是可执行程序账户?

可执行程序账户是预制的 Solana 程序,可以创建和存储其他程序。这方面的一个良好例子是 Solana Program Library(SPL)——一个支持多种链上活动的程序集合,包括创建、交换和借贷代币、生成质押池以及维护链上命名服务。SPL 的一个突出代表是 Token Program,负责创建和管理代币。

Solana 的 USDC 代币仅是一个由 Token Program 管理的代币账户。然而,代币账户并不存储用户的代币余额。这是由第三类账户中的一个成员 数据账户 处理的。

什么是不可执行的数据账户?

虽然原生程序和程序账户被认为是可执行的,但数据账户恰恰相反:它们是一个注册,反映特定程序和 Solana 协议整体的状态变化。

数据账户可以细分为:

  1. 代币账户 - 由 Token Program 创建的账户

  2. 关联代币账户(ATA) - 存储每个用户代币余额的账户

  3. 系统拥有的账户 - 存储数据并允许签署交易

代币账户代表每种可替代货币(例如 USDC、USDT 等),并包含有关代币的基本信息,如供应量、小数位数、名称等。对于每个唯一的代币账户,会生成一个不同的 关联代币账户(ATA)。例如,如果你同时拥有 USDC 和 USDT,则可以访问由 USDC 和 USDT 代币账户分别创建的两个 ATA。

Solana 账户类型和分类Solana 账户类型和分类

Solana 账户元素有哪些?

每个账户元素是一组元数据,协议可以轻松理解账户的类型和附加信息。 元数据包括:

  • lamports - 账户的 SOL 余额,以 lamports 为单位,其中 1 lamport 相当于一个 SOL 代币的十亿分之一

  • owner - 拥有该账户的程序的地址

  • executable - 一个布尔变量,指示该账户是否包含可执行代码

  • data - 存储在账户中的原始数据字节数组,无论是存储变量还是可执行代码

  • rent_epoch - 指示该账户将在下一个时期欠租金

ownerholder 之间的区别在于,owner 是控制该账户的程序,而 holder 是拥有账户私钥的用户。例如,系统拥有账户由 Solana 的原生系统程序拥有。

什么是 Solana 账户租金?

每个账户 支付租金费用 以使用区块链上的内存,这是防范措施,以防止攻击者通过占用所有内存来阻塞网络。

为了让区块链满足所有用户,它必须包括某种经济激励。这尤其适用于验证者,他们提供硬件和计算能力来验证所有交易。验证者需要维护所有状态变化的工作副本,并获得租金作为奖励。

维护最低余额等于 2 年的租金费用的账户是免租金的。如果不是,则在通过交易引用该账户时或在每个周期(目前相当于两天)时会被收费。如果账户没有包含最低的 SOL 数量以免租金,则其数据将从链上删除。

如何创建 Solana 账户

在 Solana 上创建一个系统账户就是 Solana 钱包 在用户每次创建新“钱包”时所做的工作。 钱包通过生成一个在 ED25519 椭圆曲线上生成的 64 字节密钥对来创建一个新账户。前 32 字节是私钥,当用户想要创建交易并与另一个账户或程序交互时使用。后 32 字节是钱包的公钥。

开始在 Solana 上构建

账户模型是 Solana 协议用于组织数据的系统。账户可以被视为存储桶,能够容纳一切——从原始数据、代码和状态变量,到代币余额、NFT 等。账户主要有两种类型:可执行和不可执行。

  • 原文链接: alchemy.com/overviews/so...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Alchemy
Alchemy
江湖只有他的大名,没有他的介绍。