@anywalletkit/wallet-solana

中文文档
0.6.0发布于 2026/11/03Apache-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 2751

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

中文使用文档
文档目录7 节
  1. 安装
  2. 你签什么,多少钱,当钱包拒绝
  3. 托肯-2022年
  4. 输入信息
  5. 版本交易和提供者电线
  6. 广播结果和暂停
  7. 活动历史

@anywalletkit/wallet-solana (英语)

npm

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

安装

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

时间: @anywalletkit/wallet-solana (英语)发表于 发布工作流程 与出处.

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

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。 。 。 .
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。 。 。 .

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的地址,无索引.

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 ~下个).
networkmainnetdevnet 编号 : testnet 切换 CAIP-2 代号并添加 ?cluster= 到索尔斯坎链接.
rateLimit5 转每秒要求(JSON-RPC批次计为一).
batchSize10个getTransaction 按JSON-RPC批次(1-10)拨打.
maxTokenAccounts第50条Token账户合并为地址的历史.
fetch, (中文(简体) ), timeoutMs全球,15 000AbortSignal.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 共发布 14 个版本,首次发布于 2026/10/25;过去 12 个月发布了 14 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.6.0latest2026/11/034 天前
0.5.12026/10/308 天前
0.5.02026/10/309 天前
0.4.02026/10/2910 天前
0.3.22026/10/2810 天前
0.3.12026/10/2811 天前

关于 @anywalletkit/wallet-solana 的常见问题

@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(4 天前);至今共发布 14 个版本,其中过去 12 个月发布了 14 个;首次发布于 2026/10/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。