从 'Just Data' 到 'A Global Database':我学习 Solana 的第二周

发布: (2026年5月3日 GMT+8 06:03)
8 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您想要翻译的文章正文(除代码块和 URL 之外的文字),我将把它翻译成简体中文并保持原有的 Markdown 格式。谢谢!

期望 vs. 现实

在我动手写代码之前,我想象区块链数据是这样的:

  • 交易存放在某个数据库里。
  • 我需要特殊权限才能读取它们。
  • 数据默认是孤立的、私有的。
  • 也许我需要自己运行一个完整节点。

我实际发现的情况:

我可以在互联网上查询一个随机的程序地址,立刻看到它的余额、所有者、可执行标志以及交易历史。无需 API 密钥。无需权限。无需凭证。只有:

const account = await connection.getAccountInfo(publicKey);
console.log(account.lamports); // 2,500,000,000

那一刻,当我运行 npm run inspect 并立即看到我的账户详情出现时?那就是顿悟。

The Moment It Clicked: “Public By Default”

在第 11 天,我制作了一张传统数据库与 Solana 账户的对比表。最让我震撼的一行是:

FeatureDatabaseSolana
VisibilityPrivate by default; you choose what to exposePublic by default; anyone can read any account’s data

在 Web 2 中,我习惯把数据库视作堡垒:先筑墙,然后决定谁能进入。而在 Solana 上,每个账户在创建的那一刻就是一本公开的账本。安全模型被彻底颠倒。这不是 bug——而是特性。

当我在第 12 天分别查询 devnetmainnet 上的同一地址时,看到:

  • Devnet – 0.001159846 SOL,最近的交易,新的账户
  • Mainnet – 0.069875097 SOL,不同的交易历史,独立的状态

同一个地址。相同的区块链。不同的网络。不同的数据。

这才终于说得通:这不是单一数据库,而是 多个分布式账本,它们都可以以同样的方式查询,且天生公开。

最令人惊讶的事情:没有 JOIN

当我得知 Solana 程序之间不能相互查询——没有 JOIN、没有服务器端过滤、没有 SQL——时,我起初以为这是一个限制。事实并非如此。这是一种完全不同的思维模型。

在传统 API 中,我会请求 /users/123/posts,服务器会把 users 表和 posts 表进行 JOIN。Solana 的工作方式并非如此。程序把账户作为输入。如果我想“查询”相关数据,需要在客户端获取并自行组装。

起初这感觉有点笨拙。随后我意识到:这正是 Solana 如此快速的原因。没有服务器决定如何优化我的查询。我得到的是原始数据,随后可以按需组合使用。

RPC 调用 vs. 传统 API

我多年来一直在使用 REST API。这个模式很熟悉:

  1. 发起请求
  2. 等待服务器思考
  3. 收到 JSON 响应
  4. 希望其中包含你需要的内容

RPC 调用的感觉不同——更快、更简洁。

const signatures = await connection.getSignaturesForAddress(publicKey, {
  limit: 5,
});

这会返回交易签名。不是一个漂亮的仪表盘,也不是一个摘要——只有数据本身。API 的表面很薄;结果是原始的。它迫使我思考我真正需要的是什么,而不是 API 决定给我什么。

Source:

租金模型:真实货币成本的存储

在 Solana 上,存储费用是明确的,并且与您的账户绑定。

在第 11 天,我编写了一个租金计算器:

账户大小大约租金(lamports)
0 字节~890,880
1,000 字节~1,874,880

在 Web 2 中,存储是抽象的——您在电子表格中支付每月的 AWS 账单。 在 Solana 上,您按 每字节 支付。 每一个字节都由您自行管理。

这既激进、令人恐惧,又很聪明。它让您思考数据效率,对膨胀产生后果,并将存储转变为一种功能,而非外部性。

仍然让我困惑的事

  • 程序派生地址 (PDAs) – 我经常看到它们被提及,但还没有构建过。
  • 跨程序调用 (CPIs) – 程序如何安全地调用其他程序?
  • 账户与钱包的区别 – 我了解技术层面的区别,但在概念上仍然模糊。
  • 租金退款 – 当我关闭账户时,lamports 会返回……到哪里?

本周要点

  • 账户是对象 – 不是表中的记录,也不是数据库中的文档。对象包含数据、所有者和权限。
  • 公开数据是默认的 – 不是需要你去启用的东西,而是需要你有意隐藏的东西。
  • 相同地址 ≠ 跨网络相同账户 – devnet、testnet、mainnet 是完全独立的区块链。你的地址看起来相同,但状态不同。
  • “读取链上数据”只是获取 – 没有联接、没有事务、没有超出最终性之外的一致性保证。只需要:“把这个账户的数据给我”。

下周计划

我已经花了两周时间阅读。下周我想要

不是交易。不是消息。我想用自己的程序向区块链写入数据。我想了解创建账户、在其中存储东西,然后修改它时会发生什么。

我想亲身感受运行时所强制的含义:“只有你的程序可以修改你的数据。”

大局

两周前,我认为区块链是账本。现在我认为它是数据库——按 Web 2 标准来说有点怪,但仍然是数据库。

规则不同:

  • 没有模式
  • 没有服务器
  • 默认没有私有数据
  • 没有连接操作
  • 存储成本是显式的

感觉很奇怪。感觉在某些我还没有命名的方面有点破碎。但它也感觉真实、透明且分布式——这值得我们去构建。

当你开始学习 Solana 时,最让你惊讶的是什么?留下评论——我很想知道。

Catch‑up on week 1 write‑up

公开构建。公开学习。第 1‑13 天,共 100 天。

0 浏览
Back to Blog

相关文章

阅读更多 »

从笑点到公钥

概述 结构 它被拆分为可管理的块。你首先生成 wallets 并读取 on‑chain 数据。最终你在编写完整的 smart……