@anywalletkit/wallet-solana (英语)
索拉纳账户 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 通过一个计划,
因此,网络被咨询一次 事实和失败的一步 扔之前
使用密钥 :
- 说明 —— 说
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(签名从未过期). - 硬检查 - 付费者必须是这个钱包(
allowForeignFeePayer改为 ,服务商交易不得需要其他签名 (单位:千美元)MissingSignersError),拒绝向系统程序地址转移 (单位:千美元)UnsafeTransactionError, (中文(简体) ),allowBurn)). 变换. 每个sendTransaction编号 :signTransaction(新闻,资料袋)Transaction或基础64也拒绝 排水器形状:系统Assign编号 :Allocate编号 :CreateAccountAllowPrefund(和WithSeed此钱包账户或一个CreateAccount联 合 国 这,AuthorizeNonceAccount通过这个钱包,一个符号SetAuthority(或 元数据/ 组更新授权交接, 一个符号Batch,移动灯塔 以不可见的传输指令向除此钱包以外的任何人发送 (单位:千美元)CloseAccount, (中文(简体) ),WithdrawExcessLamports, (中文(简体) ),UnwrapLamports, (中文(简体) ),WithdrawNonceAccount, (中文(简体) ),TransferSolWithSeed),此Stake-Program 指令 钱包中交注账户的标志(Authorize*到另一个键, aWithdraw对任何人,aSetLockup*与外国保管人或看守所)a 同一交易未初始化的钱包资金 (或被拆分) 这个钱包作为赌注者和取出者—— 一个 SPL 取出池WithdrawStake将钱包命名为用户利害关系机构 计数(游泳池延迟退出)——不可解码 系统 / 托肯 / 接取 指令 (UnsafeTransactionError与codecore-instruction, (中文(简体) ),sets-authority, (中文(简体) ),closes-account或者说moves-lamports· ;allowAuthorityChanges: true以取代,例如,用于象征性发射 放弃其薄荷授权)。 拒绝持久非交易 (单位:千美元)codedurable-nonce除非allowDurableNonce设置在配置或 电话的选项.transfer编号 :quoteTransfer拒绝一个不是 钱包:一个符号账户、一个薄荷或一个程序(recipient-not-wallet(a) 减少 没有账户的地址是钱包。 同样的检查运行在signCompiled财务报告和审定财务报表signTransactionMessage。钱包标志是什么程序 消费物价指数通过模拟(步骤4)加以证明。 交换汇总器 交易属于sendSerialized,增加了程序允许列表和 模拟平衡 / 所有权证明并忽略了这面旗帜. - 计算预算 ——默认价格为75%
getRecentPrioritizationFees以可写作的账目发誓minPriorityMicroLamports编号 :maxPriorityMicroLamports),单位限制为 模拟用法× 1.1. 设定priorityFee: {microLamports, computeUnitLimit}用于明确值或priorityFee: false; 预算 已放入信件的呼叫器被保留 . - 模拟 —— 说
simulateTransaction(单位:千美元)sigVerify: false签署前运行; 失败抛出SimulationError与程序日志。 还原了 钱包的后状态、交易的代号账户和 交易可能创建的每个书面账户(一个尚未存在的账户, 或一个空的系统账户; 一个额外的读取前状态),并拒绝什么 CPI 会在那里做: 钱包的账户交给程序或给定数据 (单位:千美元)wallet-owner),一个代号账户的所有人或关闭权限被改变或设置 交易创建的钱包的代名词 为另一个所有者创建的关联符名账户( e)sets-authority页:1 代表津贴没有最高一级approves-delegate(三);allowAuthorityChanges也跳过这个.simulate: false禁用闸门 (并随附CPI证明). - 收费报价 —— 说
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)amountOutMinmayan的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 ~下个). |
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 由赌注组合模块.