与 Solana 交互

在构建支付流程之前,你需要先连接到 Solana,并了解如何查询网络数据。本指南将介绍基础内容:如何建立连接,以及如何使用你在支付场景中需要的 RPC 方法,配合 @solana/kit TypeScript SDK 和 Solana CLI。此外,我们还会介绍如何使用 Solana Explorer 手动验证支付、检查账户和排查问题。

连接 Solana

Solana 的 RPC API 是以编程方式与网络交互的主要方式。你的 RPC URL 实际上就是你访问网络的 API 密钥。

请勿在生产环境中使用公共 RPC

公共端点(api.mainnet-beta.solana.comapi.devnet.solana.com) 有速率限制,没有 SLA,不适合用于生产支付流程。请使用 RPC provider 获取专属的私有 RPC 端点以部署生产环境。

在开发和测试阶段,你可以使用有速率限制的公共端点。

创建 RPC 客户端以与网络交互:

import { createSolanaRpc, createSolanaRpcSubscriptions } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const rpcSubscriptions = createSolanaRpcSubscriptions(
"wss://api.mainnet-beta.solana.com"
);

开发时建议使用 devnet(https://api.devnet.solana.com)或本地 validator,例如 Surfpool

常用 RPC 方法

Solana 的 JSON-RPC API 提供了查询网络的方法。以下是你在支付流程中最常用的方法。

获取账户信息

Solana 上所有账户都可以通过其公钥进行寻址。使用 getAccountInfo RPC 方法可以获取任意账户的信息。getAccountInfo 方法会返回一个 AccountInfo 对象,其中包含账户的公钥、SOL 余额、数据和其他元数据。

data 字段是账户数据的 base64 编码字符串。你可以使用 getBase64Codec 方法(来自 @solana/kit 包)将其解码为字节,然后再用对应的编解码器(如果已知)将其解码为可读对象,例如 getTokenCodec 用于 token account 的数据。

const accountInfo = await rpc
.getAccountInfo(address("7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV"), {
encoding: "base64"
})
.send();
const dataBytes = getBase64Codec().encode(accountInfo.value.data);
const parsedTokenData = getTokenCodec().decode(dataBytes);
console.log(parsedTokenData);

获取 Token 余额

使用 getTokenAccountBalance RPC 方法检查 token account 的余额:

const balance = await rpc.getTokenAccountBalance(tokenAccountAddress).send();
console.log(balance.value.uiAmount); // Human-readable (e.g., 100.50)
console.log(balance.value.amount); // Base units (e.g., "100500000")

构建交易

每笔交易都需要一个最新的 blockhash 以确保其有效(且不是过期的)。在创建支付交易前,使用 getLatestBlockhash RPC 方法获取一个 blockhash:

const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();

Blockhash 大约每 60 秒过期一次。请在签名和发送前立即获取最新的 blockhash。

检查交易状态

使用 getSignatureStatuses RPC 方法验证交易是否已结算:

const status = await rpc.getSignatureStatuses([signature]).send();
const result = status.value[0];
// result.confirmationStatus: "processed" | "confirmed" | "finalized"

获取交易详情

使用 getTransaction RPC 方法获取已确认交易的完整详情:

const transaction = await rpc
.getTransaction(signature, { maxSupportedTransactionVersion: 0 })
.send();

交易历史

使用 getSignaturesForAddress RPC 方法获取某地址的近期交易:

const signatures = await rpc
.getSignaturesForAddress(walletAddress, { limit: 10 })
.send();

如需全面的支付监控,请参阅 接受支付,其中涵盖了 webhook 和实时交易检测。

探索公开数据

Solana 的公开账本意味着每一笔交易、token account 和铸造信息都可以完全审计。区块浏览器让你无需编写代码即可手动验证支付、检查账户和排查问题。

你可以查询的内容:

  • 验证支付是否结算
  • 查看 token account 余额
  • 调试失败的交易
  • 查询铸造详情(供应量、小数位、权限)

常用区块浏览器: Solana ExplorerSolanaFMSolscanOrb

示例链接:

Is this page helpful?

Table of Contents

Edit Page

管理者

©️ 2026 Solana 基金会版权所有
取得联系