# 第24天:在索拉纳中,一切皆账户

发布日期:2026-05-23 10:02:53   浏览量 :1
发布日期:2026-05-23 10:02:53  
1

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

在索拉纳(Solana)上,只有……账户。一种模型。一切皆账户——你的钱包、已部署的程序、代币铸造账户、用户的代币余额。它们都存在于同一个扁平的键值存储中,其中键是一个 32 字节的地址,值是账户数据。

这听起来很简单。实际上,这是一个相当优雅的设计决策,具有深远的影响。

文件系统类比

以下是让我豁然开朗的思维模型:将索拉纳想象成一个文件系统。
每个账户都是一个文件。每个账户(文件)都有:

  1. 元数据:
    • 所有者
    • 权限
    • 大小
  2. 内容:
    • 实际数据

程序账户是可执行文件。数据账户是这些程序读取和写入的文档。而系统程序?那是操作系统内核——它负责创建新文件和转移所有权。

每个账户都有的五个字段

无论账户代表什么,它始终具有相同的五个字段:

  • lamports — SOL 余额。1 SOL = 1,000,000,000 lamports。
  • data — 原始字节数组。所有状态都存储在这里。
  • owner — 控制此账户并可以修改其数据的程序。
  • executable — 布尔值。如果为 true,则此账户包含一个已部署的程序。
  • rent_epoch — 已弃用。你会看到所有现代账户都将其设置为 u64::MAX

所有权规则是关键的安全原语:只有所有者程序才能修改账户的数据或扣除其 lamports。任何人都可以向任何可写账户存入 lamports。简单,但强大。

程序不存储自己的状态

这一点让每位 Web2 开发者都感到惊讶:索拉纳程序是无状态的

程序的可执行字节码存储在一个账户中。该程序需要的任何数据都存储在完全独立的账户中。程序只是在运行时读取和写入这些账户。这就像 Web 服务器(程序)和数据库(数据账户)之间的区别——它们是分离的实体。

在链上读取真实账户

为了具体说明,我获取了包装 SOL 铸造账户——这是索拉纳主网上最基本的账户之一。以下是我使用 @solana/kit 提取原始数据的方法:

import { createSolanaRpc, address, getBase64Encoder, getBase16Decoder } from "@solana/kit";
import { getMintDecoder } from "@solana-program/token";

const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const 

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
回到顶部