# 不用连接钱包核对 Solana USDC：读取 mint、精度与权限字段

整理：链小知（AI 辅助）
资料核对日期：2026-10-12
引用地址：https://lianxiaozhi.com/tools/guides/solana-usdc-mint-rpc-readonly
难度：进阶
核验方式：只读核验

把发行方公布的主网 mint 与 Solana 公开 RPC 的账户数据对上，区分 mint、钱包和 token account。本篇已完成三个只读 RPC 调用，未核验用户余额或收款到账。

## 使用工具
- [Solana Explorer](https://lianxiaozhi.com/tools/solana-explorer) · [官方入口](https://explorer.solana.com/)
- [Circle USDC 合约地址表](https://lianxiaozhi.com/tools/circle-usdc) · [官方入口](https://developers.circle.com/stablecoins/usdc-contract-addresses)

## 前置条件
- 先从 Circle 主网地址表确认 Solana 一行；Devnet 使用另一 mint，名称相同不能混用。
- 准备能发送 JSON 的本地 HTTP 客户端。本文请求使用公开 RPC，无需安装钱包、API 密钥或签名。
- 公共端点有速率与访问限制。本次直连超时后使用本机已有代理完成读取；不据此推断所有用户都能直连或服务整体停机。

## 1. 固定主网与发行方的完整 mint

Circle 主网表的 Solana USDC mint 为 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v。逐字抄完整字符串；不要从代币名称、Logo、聊天截图或余额列表推断身份。请求目标是 mint 本身，不能把钱包地址或其收款 token account 代入本步骤。

本次使用 Solana 官方客户端文档映射的 https://api.mainnet-beta.solana.com。先以 JSON-RPC POST 发送 {"jsonrpc":"2.0","id":1,"method":"getGenesisHash"}，记录返回值和端点。样本返回 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d；本次仅记录该值，没有用独立节点验证它。

核对结果：网络、发行方完整 mint 和实际 RPC 端点有记录；收到 HTTP 200 后仍检查 RPC error，不能只按 HTTP 状态判定成功。
依据：[Circle：USDC 主网与测试网地址表](https://developers.circle.com/stablecoins/usdc-contract-addresses)
依据：[Solana 官方客户端：集群端点映射](https://github.com/solana-foundation/framework-kit/blob/main/packages/client/README.md)
依据：[Solana：getGenesisHash](https://solana.com/docs/rpc/http/getgenesishash)

## 2. 发送只读 getAccountInfo 请求

设置 Content-Type: application/json，请求体为 {"jsonrpc":"2.0","id":2,"method":"getAccountInfo","params":["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",{"commitment":"finalized","encoding":"jsonParsed"}]}。读取 result.value 与 context.slot。

value=null 时表示该承诺状态下没有取得账户，先查地址、网络与请求；error、429 或超时都保留失败。encoding 未得到 parsed 数据时不自行猜字段含义，应查解析支持或按官方格式解码。本次 parsed.type 为 mint、isInitialized=true、executable=false，账户上下文 slot=455712999。

核对结果：请求确实针对发行方 mint，返回已初始化 mint 类型及上下文；未把 null、错误或无法解析的数据填为零。
依据：[Solana：getAccountInfo 参数与结果](https://solana.com/docs/rpc/http/getaccountinfo)
依据：[Solana：mint、token account 与权限语义](https://solana.com/docs/tokens)

## 3. 区分程序 owner 与铸币、冻结权限

result.value.owner 是维护账户的程序，不是个人持有人。本次为原始 Token Program 地址 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA，与官方程序源码 ID 相同。parsed.info.mintAuthority 和 freezeAuthority 是另外两项权限字段，应分别记录其地址或 null。

样本 decimals=6，铸币和冻结权限字段均存在。权限存在说明相应能力的配置，不能仅凭这一点判定项目有恶意；权限为 null 也不能证明所有其他风险消失。查询 mint 不会给出某个用户 token account 当前是否被冻结，更不会证明资产储备或兑付能力。

核对结果：程序 owner、mintAuthority、freezeAuthority 三项分开记录；没有把程序地址当个人持有人或作安全评级。
依据：[Solana：mint、token account 与权限语义](https://solana.com/docs/tokens)
依据：[Token Program 官方源码声明的程序 ID](https://github.com/solana-program/token/blob/main/interface/src/lib.rs)
依据：[Solana：getAccountInfo 参数与结果](https://solana.com/docs/rpc/http/getaccountinfo)

## 4. 独立读取供应字段，保存不同 slot

发送 {"jsonrpc":"2.0","id":3,"method":"getTokenSupply","params":["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",{"commitment":"finalized"}]}。使用 amount 字符串和 decimals 记录数量，不把大整数原值先转成 JavaScript Number；uiAmount 为显示值。

本次返回原始 amount=7937954857172205、decimals=6，与账户解析字段数值一致；但 supply 的 slot=455713000，与前一步不同。这是相邻时点的两个快照，不是同一 slot 的供应一致性证明。后续 mint/burn 会改变 supply，不能把这里的历史数字当实时供应量或某个钱包余额。

核对结果：原始字符串、精度与两个 slot 保留；只有同一上下文才比较当时状态，异时点差异不能直接判异常。
依据：[Solana：getTokenSupply](https://solana.com/docs/rpc/http/gettokensupply)
依据：[Solana：getAccountInfo 参数与结果](https://solana.com/docs/rpc/http/getaccountinfo)
依据：[Solana：mint、token account 与权限语义](https://solana.com/docs/tokens)

## 5. 写出身份核对完成与未验证范围

最终记录发行方 URL、网络、mint、RPC、读取时刻、两个 slot、程序 owner、精度和权限字段。可以说明本次读取的是发行方表列 mint 的已初始化账户数据；不能说明你的钱包已持有它、转账可到账或第三方交易对可卖出。

本次三个只读 RPC POST 均为 HTTP 200，字段检查通过。没有连接钱包、调用 sendTransaction、支付费用或查询用户地址；没有验证用户余额、商户账单、储备资产、兑付或冻结用户账户。公共 RPC 的访问成功也不构成生产可用性与 SLA 证明。

核对结果：交付可复查的 mint 身份及字段读数，钱包、支付、储备和服务可靠性未验证项明确保留。
依据：[Circle：USDC 主网与测试网地址表](https://developers.circle.com/stablecoins/usdc-contract-addresses)
依据：[Solana：getAccountInfo 参数与结果](https://solana.com/docs/rpc/http/getaccountinfo)
依据：[Solana：getTokenSupply](https://solana.com/docs/rpc/http/gettokensupply)
依据：[Solana 官方客户端：集群端点映射](https://github.com/solana-foundation/framework-kit/blob/main/packages/client/README.md)

## 常见错误
- USDC 名称相同，却混用主网、Devnet、包装资产或错误 mint。
- getAccountInfo 查询钱包或 token account 后，当作 mint 的供应与权限字段。
- 把程序 owner、持有人地址、mintAuthority 或 freezeAuthority 混为一谈。
- 大整数经 Number 丢失精度，或不同 slot 的供应差异被当作协议错误。
- 公开 RPC 的一次读取成功被当作转账、钱包余额、商户到账或储备兑付验收。

## 完成检查
- 发行方主网 mint 与请求地址一致，已初始化账户类型和程序 owner 可复查。
- 精度、权限、原始供应字符串与上下文分别记录。
- 公共端点连接失败与成功路径均保留；用户余额、转账和储备范围没有被扩大。

## 相关知识

## 官方依据
- [Circle：USDC 主网与测试网地址表](https://developers.circle.com/stablecoins/usdc-contract-addresses)
- [Solana 官方客户端：集群端点映射](https://github.com/solana-foundation/framework-kit/blob/main/packages/client/README.md)
- [Solana：getGenesisHash](https://solana.com/docs/rpc/http/getgenesishash)
- [Solana：getAccountInfo 参数与结果](https://solana.com/docs/rpc/http/getaccountinfo)
- [Solana：getTokenSupply](https://solana.com/docs/rpc/http/gettokensupply)
- [Solana：mint、token account 与权限语义](https://solana.com/docs/tokens)
- [Token Program 官方源码声明的程序 ID](https://github.com/solana-program/token/blob/main/interface/src/lib.rs)
