# @anywalletkit/wallet-solana 中文文档

规范地址：https://npmcn.com/package/%40anywalletkit/wallet-solana/

版本：0\.6\.0
npm 元数据更新时间：2026-11-02T20:21:06.826Z
中文译文更新时间：2026-11-06T16:25:19.906Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40anywalletkit/wallet-solana
原文对照：https://npmcn.com/package/%40anywalletkit/wallet-solana/?lang=original
项目主页：https://docs.anywallet.tech/
源码仓库：https://github.com/ultratestbro/anywalletkit

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.2 MB，17 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：7 个
- 首次发布：2026-10-24T18:43:17.579Z
- 最新版本发布：2026-11-02T20:21:06.332Z
- 近 30 天下载量：2751（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：14（近 12 个月 14 个）

## 中文简介

任何钱包的索拉纳钱包:SLIP-10m/44'/501'/i'/0'账户,与ATA创建的SOL和SPL转账,高贵的ed25519签名(不需要WebCrypto),建于@solana/kit上.

## 安装

```sh
npm install @anywalletkit/wallet-solana
```

也可以使用：`pnpm add @anywalletkit/wallet-solana`、`yarn add @anywalletkit/wallet-solana`、`bun add @anywalletkit/wallet-solana`

## README

# @anywalletkit/wallet-solana (英语)

[![npm](https://img.shields.io/npm/v/@anywalletkit/wallet-solana?label=npm)](https://www.npmjs.com/package/@anywalletkit/wallet-solana)

索拉纳账户 `m/44'/501'/i'/0'` (SLIP-10 Ed25519——幽灵/索尔夫拉尔) 默认值),由金向量在 `@anywalletkit/conformance`。 。 。 .

## 安装

```sh
npm install @anywalletkit/wallet-solana
# or: pnpm add @anywalletkit/wallet-solana  ·  yarn add @anywalletkit/wallet-solana
```

时间: [@anywalletkit/wallet-solana (英语)](https://www.npmjs.com/package/@anywalletkit/wallet-solana)发表于 [发布工作流程](https://github.com/ultratestbro/anywalletkit/blob/main/RELEASING.md) 与出处.

签名使用高贵的 Ed25519 超过已编译的信件字节,所以没有 WebCrypto 依赖性: 在节点和 React Industrial Hermes 中运行相同的代码 没有Ed25519 微妙多填.

```ts
import WalletManagerSolana from '@anywalletkit/wallet-solana'

const wallet = new WalletManagerSolana(seedPhrase, { provider: ['https://rpc-a', 'https://rpc-b'] })
const account = await wallet.getAccount(0)
await account.transfer({ recipient: 'So1…', amount: 10_000_000n })                 // SOL (lamports)
await account.transfer({ token: USDC_MINT, recipient: 'So1…', amount: 1_000_000n }) // SPL, creates the ATA if missing
await account.sendTransaction(transactionMessage)                                  // any @solana/kit message
wallet.dispose()
```

## 你签什么,多少钱,当钱包拒绝

每个 `transfer` 编号 : `sendTransaction` 编号 : `signTransaction` 通过一个计划, 因此,网络被咨询一次 事实和失败的一步 扔之前 使用密钥 :

1.  **说明** —— 说 `account.describeTransaction(tx)` (或 `describeTransaction(tx, {account})`, (中文(简体) ), 纯/离线)解码系统,托肯,托肯-2022,关联-托肯和 计算预算指示和报告 `kind` (单位:千美元)`sol-transfer`, (中文(简体) ), `spl-transfer`, (中文(简体) ), `token2022-transfer`, (中文(简体) ), `ata-create`, (中文(简体) ), `program-call`, (中文(简体) ), `mixed`(中文(简体) ) 加警告: `unknown-program`, (中文(简体) ), `sets-authority`, (中文(简体) ), `closes-account`, (中文(简体) ), `approves-delegate`, (中文(简体) ), `unlimited-approve`, (中文(简体) ), `foreign-fee-payer`, (中文(简体) ), `missing-signers`, (中文(简体) ), `unresolved-lookup-tables`, (中文(简体) ), `burn-address`, (中文(简体) ), `durable-nonce`, (中文(简体) ), 财务报告和审定财务报表 `lifetime`数字 : `blockhash`,或 `durable-nonce` 当第一个指令是 `AdvanceNonceAccount` (签名从未过期).
2.  **硬检查** - 付费者必须是这个钱包(`allowForeignFeePayer` 改为 ,服务商交易不得需要其他签名 (单位:千美元)`MissingSignersError`),拒绝向系统程序地址转移 (单位:千美元)`UnsafeTransactionError`, (中文(简体) ), `allowBurn` )). 变换. 每个 `sendTransaction` 编号 : `signTransaction` (新闻,资料袋) `Transaction` 或基础64也拒绝 排水器形状:系统 `Assign` 编号 : `Allocate` 编号 : `CreateAccountAllowPrefund` (和 `WithSeed` 此钱包账户或一个 `CreateAccount` 联 合 国 这, `AuthorizeNonceAccount` 通过这个钱包,一个符号 `SetAuthority` (或 元数据/ 组更新授权交接, 一个符号 `Batch`,移动灯塔 以不可见的传输指令向除此钱包以外的任何人发送 (单位:千美元)`CloseAccount`, (中文(简体) ), `WithdrawExcessLamports`, (中文(简体) ), `UnwrapLamports`, (中文(简体) ), `WithdrawNonceAccount`, (中文(简体) ), `TransferSolWithSeed`),此Stake-Program 指令 钱包中交注账户的标志(`Authorize*` 到另一个键, a `Withdraw` 对任何人,a `SetLockup*` 与外国保管人或看守所)a 同一交易未初始化的钱包资金 (或被拆分) 这个钱包作为赌注者和取出者—— 一个 SPL 取出池 `WithdrawStake` 将钱包命名为用户利害关系机构 计数(游泳池延迟退出)——不可解码 系统 / 托肯 / 接取 指令 (`UnsafeTransactionError` 与 `code` `core-instruction`, (中文(简体) ), `sets-authority`, (中文(简体) ), `closes-account` 或者说 `moves-lamports`· ; `allowAuthorityChanges: true` 以取代,例如,用于象征性发射 放弃其薄荷授权)。 拒绝持久非交易 (单位:千美元)`code` `durable-nonce`除非 `allowDurableNonce` 设置在配置或 电话的选项. `transfer` 编号 : `quoteTransfer` 拒绝一个不是 钱包:一个符号账户、一个薄荷或一个程序(`recipient-not-wallet`(a) 减少 没有账户的地址是钱包。 同样的检查运行在 `signCompiled` 财务报告和审定财务报表 `signTransactionMessage`。钱包标志是什么程序 消费物价指数通过模拟(步骤4)加以证明。 交换汇总器 交易属于 `sendSerialized`,增加了程序允许列表和 模拟平衡 / 所有权证明并忽略了这面旗帜.
3.  **计算预算** ——默认价格为75% `getRecentPrioritizationFees` 以可写作的账目发誓 `minPriorityMicroLamports` 编号 : `maxPriorityMicroLamports`),单位限制为 模拟用法× 1.1. 设定 `priorityFee: {microLamports, computeUnitLimit}` 用于明确值或 `priorityFee: false` ; 预算 已放入信件的呼叫器被保留 .
4.  **模拟** —— 说 `simulateTransaction` (单位:千美元)`sigVerify: false`签署前运行; 失败抛出 `SimulationError` 与程序日志。 还原了 钱包的后状态、交易的代号账户和 交易可能创建的每个书面账户(一个尚未存在的账户, 或一个空的系统账户; 一个额外的读取前状态),并拒绝什么 CPI 会在那里做: 钱包的账户交给程序或给定数据 (单位:千美元)`wallet-owner`),一个代号账户的所有人或关闭权限被改变或设置 交易创建的钱包的代名词 为另一个所有者创建的关联符名账户( e)`sets-authority`页:1 代表津贴没有最高一级`approves-delegate`(三); `allowAuthorityChanges` 也跳过这个. `simulate: false` 禁用闸门 (并随附CPI证明).
5.  **收费报价** —— 说 `quoteSendTransaction` 编号 : `quoteTransfer` 返回时 `{fee, baseFee, priorityFee, microLamports, computeUnitLimit, tokenFee?}`· ; `transferMaxFee` 编号 : `transactionMaxFee` 比较 `fee`。 。 。 .

```ts
const q = await account.quoteTransfer({ token: MINT, recipient, amount: 10_000n })
q.priorityFee  // lamports added by the compute budget
q.tokenFee     // Token-2022 transfer fee withheld by the mint (0 for plain SPL)
```

### 托肯-2022年

`transfer` 读取薄荷一次:所有者程序、小数和(对于Token-2022) `TransferFee` 扩展执行此时代。 转让使用情况 `transferChecked` (链上经核实的薄荷和小数);含费薄荷的使用 `transferCheckedWithFee` 所以,改变收费 使得交易失败而不是 默而取取之. 接受者的ATA是为正确的程序衍生出来的.

### 输入信息

`getTokenInfo(mint)` 读取链条上的一分薄荷, 对于用户添加的符号 地址: `{ standard: 'spl' | 'spl-token-2022', decimals, symbol, name, totalSupply, flags }`。名称和符号来自Token-2022元数据 扩展名,否则Metaplex元数据账户(`""` 既无,又无; 任何人都可以命名一个符号"USDC",所以只有地址可以识别它. `flags` 列表 持有人应该知道: `mint-authority`, (中文(简体) ), `freeze-authority`,则 Token-2022 扩展 `permanent-delegate` (有人可以移动或燃烧任何) 余额, `transfer-fee` (非为零), `transfer-hook`, (中文(简体) ), `non-transferable`, (中文(简体) ), `default-frozen`, (中文(简体) ), `pausable`地址不是初始化的Token / Token-2022 薄荷掷出 `NotATokenError`。 。 。 .

```ts
const pyusd = await account.getTokenInfo('2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo')
// { standard: 'spl-token-2022', decimals: 6, symbol: 'PYUSD', name: 'PayPal USD',
//   flags: ['mint-authority', 'freeze-authority', 'permanent-delegate'], … }
```

### 版本交易和提供者电线

-   `transfer({..., lookupTables: [table]})` 编号 : `sendTransaction({to, value, lookupTables})` 获取表格并压缩 v0 信件 .
-   直接接受互换或DeFi提供者的基数64电线交易: `signTransaction(base64)` 编号 : `sendTransaction(base64)` 解码,运行硬 检查,模拟,添加此钱包的签名( 其他保存) 和 返回/广播电线。 消息字节从未被更改 .
-   `sendSerialized(base64, guard)` 编号 : `checkSerialized(base64, guard)` 证明 签名前提供商建造的电线:程序许可列表,硬检查, 和模拟平衡证明 `guard.expect` (单位:千美元)`maxLamportsOut`, (中文(简体) ), `tokenIn: {mint, minAmount, maxAmount?}`, (中文(简体) ), `maxTokenOut`) (中文(简体) ). 万事俱备 成为非阴性偏差( n)`invalid-expectation` 否则,在任何RPC之前 电话; `tokenIn.maxAmount` 拒绝支付超过钱包的电线 问(`token-in-excess`) (中文(简体) ). 一个知道确切指令的模块 行动需要通行证 `guard.instructions`: 每一级指令 必须匹配一条规则——程序,数据前缀(`data`,十六进制),可选精确 `dataLength`和特定职位的账户进行对比 表格得到解决——或拒绝电线(`unexpected-instruction`) (中文(简体) ). 索拉纳的桥通了 `expect.bridgeOut: {destChain, recipient}` (洗去2 把它交给账户钩作为 `bridgeOut`) (中文(简体) ). 在玛雅人路线上 管理玛雅人自己的一个程序,直接或通过它的CPI代理) 顶级指令,在代理未被包装的情况下,必须是守门员所遵循的 (转入此钱包的自有账户或收费钱包,最多为3%) 可能留下的; 进入钱包或桥的木星 v2 路径 无平台收费或正滑行份额; Mayan's Swift / MCTP/快速MCTP订单,每个玛雅订单必须支付 `recipient` 打开 `destChain` 非零最低,裁判员/玛雅人收费标准最多 `MAYAN_REFERRER_FEE_MAX_BPS` (50)和固定中继器费用最多 `MAYAN_RELAYER_FEE_MAX_BPS` 其投入的10%。 与经审查的条款 互换2 添加: `destToken`, (中文(简体) ), `minAmountOut` + 键 `destDecimals`, (中文(简体) ), `slippageBps`· ; 没有玛雅人的命令 `destToken` 或者说 `minAmountOut` 被拒绝—— 命令的输出符号必须是 `destToken` 及其最小值(Swift) `amountOutMin` mayan的8个小数点; 对于一个简单的 MCTP / Fast MCTP USDC 桥梁,桥梁金额减去其费用 `destToken` 目标 链的原生圆形 USDC) `minAmountOut` 减 1 bp 四舍五入 —— 说 `minAmountOut` 已经是计划失败的最小值了 (单位:千美元)`bridge-recipient`, (中文(简体) ), `bridge-token`, (中文(简体) ), `bridge-min`, (中文(简体) ), `bridge-payee`, (中文(简体) ), `bridge-instruction`, (中文(简体) ), `bridge-missing`, (中文(简体) ), `bridge-fee` (否则) 其他索拉纳桥梁(中继、地层扫描、近东) 意向,LI.FI意向,(.)按链外顺序或 数据 守卫不读 : 它们没有检查收件人,只保存到 天花板和程序许可列表, 如无 `bridgeOut`。 。 。 . `serializedGuardFromExecution(expect, extra?)` 建立警卫从 交换2引擎的 `sendSerializedTransaction` 期望每个字段 结转(`bridgeOut` ——绘制钩子图 用这个, `(tx, expect) => account.sendSerialized(tx, serializedGuardFromExecution(expect))`而不是亲手. 净余额只让同样收回抵押品的存款 转移它通过;规则没有.
-   `getAccountInfos(addresses)` 读取原始账户(所有者、灯塔、数据) 命令问, `null` 如果没有,则用于检查 a 的模块 提供商的数字与链条状态相反.

### 广播结果和暂停

一个url `provider` 之后放弃 `timeoutMs` 每个请求(违约15 000) (单位:千美元)`AbortSignal.timeout`,或运行时间所缺少的计时器) 时间流出是一个 `NetworkError`。一个提供商列表以相同的签名失败 字节,从没有新的签名 。 拒绝发送节点( 飞行前失败, 错误) 签名, 一个 HTTP 4xx, 如速率限制) 扔出错误: 没什么 发送、规划和再次签名。 任何其它的 - 一个暂停,一个滴滴 连接, 408 / 5xx, 或在另一个提供者没有得到答复后拒绝 - 掷出 `BroadcastUnknownError` (单位:千美元)`maybeSent: true`, (中文(简体) ), `hash` =签名:交易可能着陆,因此 别再签了,看 `getTransactionReceipt(hash)` 直到它被围住 过期.

## 活动历史

`createSolanaHistory` 是链子 `HistorySource` (单位:千美元)`@anywalletkit/core`: 最新一号 `ChainTx` 页面为普通JSON-RPC的地址,无索引.

```ts
import { createSolanaHistory } from '@anywalletkit/wallet-solana/history'

const history = createSolanaHistory({ rpcUrls: ['https://api.mainnet-beta.solana.com'] })
const page = await history.listActivity('2tKRnQTAXmryVYxDNSajdZg1DfX2FbHKNboWr5EBiKhW', { limit: 25 })
const older = await history.listActivity(address, { cursor: page.cursor })
const one = await history.getTransaction(page.items[0].hash, address)
history.explorerTxUrl(one.hash) // https://solscan.io/tx/…
```

| 选项 | 默认 | 说明 |
| --- | --- | --- |
| `rpcUrl` 编号 : `rpcUrls` | —— 说 | 一个或多个JSON-RPC端点,按请求顺序进行(HTTP 429 / 5xx / network ~下个). |
| `network` | `mainnet` | `devnet` 编号 : `testnet` 切换 CAIP-2 代号并添加 `?cluster=` 到索尔斯坎链接. |
| `rateLimit` | 5 转 | 每秒要求(JSON-RPC批次计为一). |
| `batchSize` | 10个 | `getTransaction` 按JSON-RPC批次(1-10)拨打. |
| `maxTokenAccounts` | 第50条 | Token账户合并为地址的历史. |
| `fetch`, (中文(简体) ), `timeoutMs` | 全球,15 000 | `AbortSignal.timeout` 当运行时间有它. |

**端点.** `getTokenAccountsByOwner` (托肯+托肯-2022年, `jsonParsed`,每个地址缓存) `getSignaturesForAddress` 钱包 **和每个代号账户** → `getTransaction` (单位:千美元)`jsonParsed`, (中文(简体) ), `maxSupportedTransactionVersion: 0`, (中文(简体) ), `confirmed`),分批为10个. 节点所检查的交易仍然产生一行(从签名列表中状态,没有传输, `raw.tx === null`) (中文(简体) ).

**页面和光标.** 每个列表的签名都按档次合并(最先更新),去复本,页面取顶端 `limit` 加上边界插槽的链接,所以每个列表所消耗的行构成节点返回内容的前缀. 光标是基数64 JSON `{ v: 1, l: { <list address>: <before signature> | '' | null } }`页:1 `before` 按名单签名, `''` =没有开始, `null` 已经累坏了 列表集被冻结在光标中;一个创建的符号账户在下个新列表中加入. 即使一项交易触及到若干清单,也精确地进行加固.

**测绘.** 本地转移来自 `preBalances`编号 :`postBalances` 给付款人增加的手续费 `pre`编号 :`postTokenBalances` 每薄荷归结于 象征性帐户' **拥有者** (单位:千美元)`standard` =: `spl` 编号 : `token2022` 从 `programId`, (中文(简体) ), `decimals` 从余额中,发送方与最大第一接收方对接;没有发送方的接收方是薄荷(`from` = 薄荷,没有接收器的发件人被烧伤(`to` = 薄荷 ). `fee` =: `meta.fee`, (中文(简体) ), `status` 从 `meta.err`, (中文(简体) ), `block` =档. `call.programs` 列出每个顶级指令程序 id, 然后是内部程序; `call.to` 是第一个非管道程序(系统、计算预算、备忘录、托肯、托肯-2022、关联托肯)和 `call.data` 该指令的基础58数据——什么 `@anywalletkit/protocol-staking-spl-stake-pool-solana` 读取。 只有管道(SOL或SPL转让)的交易没有 `call`· ; `to` 然后是收件人的拥有者. `nativeValue` 付款人发送的SOL是普通转账,0用于程序呼叫。 符号在此不解决( 没有目录依赖); 套件会填充 .

装入 `test/fixtures/history/` 2026年10月14日从 `api.mainnet-beta.solana.com` 用于测试钱包的签名页:钱包的签名页、其JitoSOL账户和USDC账户,两者都是代号账户列表,即Jito `DepositSol` (单位:千美元)`3SmwE6qf…`,与控股模块的活性固定值相同的交易),一个SOL发送和接收,一个USDC发送和一个Token-2022 → UDC聚合值互换. `test/history.test.ts` 检查此来源为Jito存款所建的行 `stake` 由赌注组合模块.

## 常见问题

### @anywalletkit/wallet-solana 是什么？

任何钱包的索拉纳钱包:SLIP-10m/44'/501'/i'/0'账户,与ATA创建的SOL和SPL转账,高贵的ed25519签名\(不需要WebCrypto\),建于@solana/kit上\.

### 如何安装 @anywalletkit/wallet-solana？

在项目目录运行 npm install @anywalletkit/wallet-solana，或使用 pnpm add / yarn add / bun add。

### @anywalletkit/wallet-solana 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @anywalletkit/wallet-solana 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @anywalletkit/wallet-solana 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @anywalletkit/wallet-solana 可以商用吗？

@anywalletkit/wallet-solana 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @anywalletkit/wallet-solana 的下载量有多少？

根据 npm 官方下载统计，@anywalletkit/wallet-solana 在 2026/10/06 – 2026/11/04 这 30 天内被下载 2,751 次，日均约 92 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @anywalletkit/wallet-solana 还在维护吗？

最新版本 0\.6\.0 发布于 2026/11/03（5 天前）；至今共发布 14 个版本，其中过去 12 个月发布了 14 个；首次发布于 2026/10/25。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

