Solana 第2周:从终端日志到实时浏览器仪表盘

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

Source: Dev.to

公共数据库

在开始之前,我以为区块链数据会晦涩且难以获取。实际上,Solana 更像是一个全球分布的公共数据库。在传统应用中,你的数据隐藏在由后端服务器管理的私有 SQL 或 NoSQL 数据库中。而在 Solana 上,一切都是 账户,且账户默认是公开的;任何拥有 RPC 连接的人都可以随时读取账户的状态。

终端 vs. 浏览器

我的一周工作像是上下半场的比赛:在终端里操作,在浏览器里构建。

终端

  • 使用 Solana CLI 的简单命令(如 solana balance)检查地址余额。
  • 记录原始交易数据,以实时查看 SOL 的流动。

浏览器

  • 将余额获取迁移到使用 @solana/web3.js 库的 JavaScript 前端。
  • 建立到集群的 Connection,并使用 getBalance 以编程方式获取数据。
import { Connection, clusterApiUrl, LAMPORTS_PER_SOL } from '@solana/web3.js';

const connection = new Connection(clusterApiUrl('devnet'));
const publicKey = /* your public key */;

async function getSolBalance() {
  const lamports = await connection.getBalance(publicKey);
  const sol = lamports / LAMPORTS_PER_SOL;
  console.log(`Balance: ${sol} SOL`);
}

获取余额

Solana 并不以 “1 SOL” 的形式存储余额。它使用 Lamports,即 SOL 的最小单位(1 SOL = 10⁹ Lamports)。要显示用户的实际余额,需要将结果除以 LAMPORTS_PER_SOL 常量:

SOL = Lamports / 10^9

账户历史

读取交易是一个两步过程:

  1. 使用 getSignaturesForAddress 获取签名(交易 ID)。
  2. 使用 getParsedTransaction 获取交易详情

内置的限制每次请求只能返回 1,000 条签名,因此需要使用 before 参数进行分页,以获取完整历史。

// Step 1: Get signatures
const signatures = await connection.getSignaturesForAddress(publicKey, { limit: 1000 });

// Step 2: Get transaction details
const transactions = await Promise.all(
  signatures.map(sig => connection.getParsedTransaction(sig.signature))
);

Devnet 与 Mainnet‑beta 对比

功能DevnetMainnet‑beta
SOL 价值$0(免费空投)实际市场价值
速率限制对测试宽松公共节点上限制严格
用途测试与演示生产应用

关键要点: 公共端点会被强力限流,常返回 429 Too Many Requests 错误。

收获

  • 提交级别 – 在 “processed” 交易的速度与 “finalized” 交易的确定性之间取得平衡仍是学习曲线。
  • 速率限制 – 在 Mainnet‑beta 上,尤其是共享 RPC 节点,预计会有更严格的限制。

下一步

下周我将深入 程序(Programs),探索如何向链上写入数据。


如果你也在走同样的道路,欢迎联系!

0 浏览
Back to Blog

相关文章

阅读更多 »