跳到主内容
智客 ZICQ

技能库 智客分类:Agent 工作流 solana-mobile-wallet

Solana Mobile Wallet

使用移动钱包适配器和钱包UI在React Introduction Expoapps中连接索拉纳钱包并签名或发送交易. 添加连接钱包按钮时使用, 显示连接地址、 断开连接、 签署信件、 与索拉纳签入、 传输 SOL, 或从索拉纳移动应用程序发送任何交易 .

7827 安装量

官方网址:skills.sh

技能介绍

先看中文介绍;官方 description 原文单独保留,不改写 SKILL.md。

做什么

使用移动钱包适配器和钱包 UI 连接索拉纳钱包,并在 React Introduct Expo apps 中签名或发送交易

何时用

添加连接钱包按钮, 显示连接地址、 断开、 签名信件、 与索拉纳签名、 传输 SOL 或从索拉纳移动应用程序发送任何交易

代理如何加载

按 Agent Skills 渐进披露:启动时只加载 name 与 description(约 100 token);任务匹配后才读入整份 SKILL.md 正文;scripts/、references/、assets/ 仅在需要时再读。 本文件正文结构:Solana wallets on mobile、Step 1: pick the stack — do this before writing any code、Step 2: confirm the provider is mounted、Step 3: use the hook、Connect and disconnect、Read chain data。 其中含规范建议的小节:分步指令。

文件分析

文件分析:除 SKILL.md 外,正文引用了 references/kit.md、references/web3js.md,属于带资源的技能包,这些文件按需再读。

官方 description(原文)

Connect Solana wallets and sign or send transactions in React Native Expo apps using Mobile Wallet Adapter and Wallet UI. Use when adding a connect wallet button, showing a connected address, disconnecting, signing messages, sign-in with Solana, transferring SOL, or sending any transaction from a Solana mobile app.

Solana wallets on mobileStep 1: pick the stack — do this before writing any codeStep 2: confirm the provider is mountedStep 3: use the hookConnect and disconnectRead chain dataSend a transactionReference materialChecking whether the wallet or the app is at faultRelated skillsLinks

来源分类:skills.sh agent-skill

SKILL.md 与 Agent 调用

官方规范 ↗
name
solana-mobile-wallet
description
Connect Solana wallets and sign or send transactions in React Native Expo apps using Mobile Wallet Adapter and Wallet UI. Use when adding a connect wallet button, showing a connected address, disconnecting, signing messages, sign-in with Solana, transferring SOL, or sending any transaction from a Solana mobile app.
  1. 发现技能客户端向 Agent 提供名称与描述目录。
  2. 匹配与调用用户指定或任务匹配后,载入 SKILL.md 指令。
  3. 按需加载按步骤读取参考文档、使用脚本与素材。
指令中引用的文件 · 2
  • references/kit.md
  • references/web3js.md

以下路径提取自原文;文件是否齐全请以来源仓库中的完整目录为准。

具体调用语法与可用工具以目标 Agent 客户端为准。 查看调用机制说明 ↗

安装这个技能

Skills CLI ↗

先选择目标 Agent 和安装范围,保留技能包的附属文件,安装后检查客户端能否发现该技能。

该技能引用了附属文件,请从来源获取完整目录;仅复制 SKILL.md 可能缺少依赖。

交给 Agent 安装

复制安装指令给支持 Agent Skills 的代理,确认其中的目标目录与客户端匹配。

把 Agent Skill「solana-mobile-wallet」安装到我的项目:SKILL.md 原文与官方 description 见 https://zicq.com/zh/skills/skl-7e940c9f3a8c31c0-Solana-Mobile-Wallet.html
请存为 .cursor/skills/solana-mobile-wallet/SKILL.md 或 .claude/skills/solana-mobile-wallet/SKILL.md,frontmatter 的 name 与 description 保持原样,不要改写。
该技能还带 scripts/、references/、assets/ 等文件,请从 https://github.com/solana-mobile/solana-mobile-skills 取完整目录,不要只建一个 SKILL.md。

GitHub 完整包 ↗

终端安装 · Skills CLI

需要 Node.js 与 npx。先查看仓库技能列表,确认实际名称。

npx skills add 'https://github.com/solana-mobile/solana-mobile-skills' --list

npx skills add 'https://github.com/solana-mobile/solana-mobile-skills' --skill 'solana-mobile-wallet'

CLI 会交互选择目标 Agent,默认安装到项目;用户级安装使用 -g。先通过查看命令核对仓库内容,再用 npx skills list 检查已安装技能。

阅读排版
--- name: solana-mobile-wallet description: Connect Solana wallets and sign or send transactions in React Native Expo apps using Mobile Wallet Adapter and Wallet UI. Use when adding a connect wallet button, showing a connected address, disconnecting, signing messages, sign-in with Solana, transferring SOL, or sending any transaction from a Solana mobile app. --- # Solana wallets on mobile Wallet connection and transaction signing through Mobile Wallet Adapter (MWA), wrapped by `@wallet-ui/react-native-kit` (or `@wallet-ui/react-native-web3js` on the legacy stack). **MWA requires a development build on Android. Expo Go will not work.** If the project has no development build yet, or does not exist, start with the `solana-mobile` skill. ## Step 1: pick the stack — do this before writing any code **Write kit code.** `@solana/kit` with `@wallet-ui/react-native-kit` is the stack to reach for, and everything in this file describes it. There is exactly one reason to write `@solana/web3.js` instead: the project already runs on it. Check `package.json` first. | `package.json` says | Do this | | --- | --- | | `@wallet-ui/react-native-kit`, or no Solana client yet | Kit. This file, plus [references/kit.md](references/kit.md) | | `@wallet-ui/react-native-web3js` is the app's Solana client | [references/web3js.md](references/web3js.md) | | The user explicitly asked for web3.js | [references/web3js.md](references/web3js.md), and say why kit would be better | Do not introduce web3.js into a kit project, or mix the two in one app. Their provider props, hook return values, and transaction construction all differ, so code from one silently fails on the other. If a project has no Solana client at all, that is a new build — use kit. Adding a *new* wallet feature to an existing web3.js app is not a reason to migrate mid-task. Match what is there, and mention migration as a follow-up if it seems worth it. ## Step 2: confirm the provider is mounted `useMobileWallet` returns empty state without `MobileWalletProvider` above it. Look for it in the root layout or an app-providers module. Build the cluster with the `createSolana*` helpers rather than by hand — a `SolanaCluster` also needs a `label`, which the helpers fill in: ```tsx import { type AppIdentity, createSolanaDevnet, MobileWalletProvider, type SolanaCluster, } from '@wallet-ui/react-native-kit' const identity: AppIdentity = { name: 'My App' } const cluster: SolanaCluster = createSolanaDevnet({ url: 'https://api.devnet.solana.com' }) {children} ``` `createSolanaDevnet`, `createSolanaTestnet`, and `createSolanaLocalnet` take optional props; `createSolanaMainnet` requires a `url`, since there is no sensible public default for mainnet. The provider props are `cluster`, `identity`, and optional `cache`, `createClient`, `children`. There is **no `chain` prop and no `endpoint` prop** — passing those does nothing. Every `AppIdentity` field is optional. `name` alone is enough to get started; add `uri` as a real deep link for anything shipping, since wallets display it during authorization and a placeholder can read as a phishing attempt. Put `QueryClientProvider` from `@tanstack/react-query` above the wallet provider — the hook patterns below are queries and mutations. ## Step 3: use the hook ```tsx import { useMobileWallet } from '@wallet-ui/react-native-kit' const { account, connect, disconnect, client } = useMobileWallet() ``` What the hook actually returns on the kit stack: | Value | Type | Notes | | --- | --- | --- | | `account` | `Account \| undefined` | `undefined` when disconnected, not `null` | | `accounts` | `Account[] \| null` | All authorized accounts | | `connect` | `() => Promise` | Opens the wallet picker | | `disconnect` | `() => Promise` | | | `client` | `Client` | Kit client — use `client.rpc` for RPC calls | | `chain` | `SolanaClusterId` | The active cluster. Put it in query keys | | `sendTransactions` | `(instructions: Instruction[]) => Promise` | Simplest send path | | `signAndSendTransaction` | `(tx, minContextSlot) => Promise` | Note the second argument | | `signTransaction` | `(tx) => Promise` | Sign without broadcasting | | `signMessages` | `(msg: Uint8Array) => Promise` | | | `signIn` | `(payload) => Promise` | Sign-in with Solana; can also connect | | `identity`, `store` | | Config and authorization store | Singular aliases exist for several of these — `sendTransaction`, `signMessage`, `signTransactions` — with the same signatures. The templates use the plural forms; either works, so follow whatever the project already uses. Four things that trip people up: 1. **There is no `connected` boolean.** Derive it: `const connected = !!account`. 2. **`signAndSendTransaction` takes `minContextSlot` as a second argument.** Calling it with only a transaction fails. Get the slot from `getLatestBlockhash`, or use `sendTransactions(instructions)`, which handles this for you. 3. **The kit hook exposes `client`, not `connection`.** `connection` only exists on the web3.js stack. 4. **Include `chain` in every React Query key that holds chain data.** Otherwise switching cluster serves the previous network's cached balances, which looks like a wallet bug. `account.address` is a kit `Address` (a branded string), so it interpolates into text directly. `account.label` is the wallet-supplied name and may be undefined. ## Connect and disconnect ```tsx import { Pressable, Text } from 'react-native' import { useMobileWallet } from '@wallet-ui/react-native-kit' export function ConnectButton() { const { account, connect, disconnect } = useMobileWallet() async function onPress() { try { if (account) await disconnect() else await connect() } catch (error) { // The user dismissing the wallet picker lands here. Do not treat it as a crash. console.error(error) } } return ( {account ? 'Disconnect' : 'Connect Wallet'} ) } ``` Always wrap `connect()` in try/catch — cancelling the wallet picker rejects the promise. Cancellation is a normal outcome, not an error state worth alarming the user about; see [references/kit.md](references/kit.md) for how to tell cancellation apart from real failures. Authorization is cached, so the app reconnects on restart without a new prompt. ## Read chain data Use `client` from the hook. There is no need to build a client of your own: ```tsx import type { Address } from '@solana/kit' import { useQuery } from '@tanstack/react-query' import { useMobileWallet } from '@wallet-ui/react-native-kit' export function useGetBalance({ address }: { address: Address }) { const { chain, client } = useMobileWallet() return useQuery({ queryFn: () => client.rpc.getBalance(address).send(), queryKey: ['get-balance', chain, address], }) } ``` Kit RPC calls are lazy: `client.rpc.someMethod(...)` builds a request and `.send()` runs it. Forget `.send()` and nothing errors — the data simply never arrives. Balances come back as `bigint` lamports. Convert deliberately, and never with `parseFloat`: ```ts export function lamportsToSol(lamports: bigint) { return Number(lamports) / 1e9 } ``` ## Send a transaction Build instructions and hand them over. This covers most cases: ```tsx import { getAddMemoInstruction } from '@solana-program/memo' import type { Instruction } from '@solana/kit' const { sendTransactions } = useMobileWallet() const instructions: Instruction[] = [getAddMemoInstruction({ memo: 'gm' })] const signature = await sendTransactions(instructions) ``` `sendTransactions` handles blockhash, `minContextSlot`, fee payer, and signature decoding. It returns as soon as the wallet has submitted, so confirm the signature before treating the transaction as done — [references/kit.md](references/kit.md#confirming-a-transaction) has the helper. Reach for the explicit `pipe` form only when you need fee-payer control, a specific blockhash lifetime, or a fee pre-check. Full worked example, with the balance-versus-fee assertion and signature decoding: [references/kit.md](references/kit.md). ## Reference material - [references/kit.md](references/kit.md) — kit stack: clusters and config, reading chain data, transactions, sign-in with Solana, message signing, error handling - [references/web3js.md](references/web3js.md) — legacy `@solana/web3.js` stack, and a migration sketch - [references/troubleshooting.md](references/troubleshooting.md) — connection and signing failures with known causes When something here is ambiguous, read the template. The patterns in this skill follow [`expo-kit-minimal`](https://github.com/solana-mobile/templates/tree/main/mobile/expo-kit-minimal), which is a complete working app and stays current in a way prose does not: ```bash npx solana-mobile@latest create /tmp/reference-app --template expo-kit-minimal --skip-install ``` ## Checking whether the wallet or the app is at fault Before debugging connect or signing code, run the same flow with no app involved: ```bash npx solana-mobile@latest device install fakewallet # if the device has no wallet npx solana-mobile@latest playground ``` `playground` serves a wallet testing page on the device and streams each MWA interaction — connect, sign in, sign message, sign transaction, sign and send — back to the terminal. If it fails there too, the fault is the wallet or the device, not this code. The `solana-mobile` skill covers both commands. ## Related skills - `solana-mobile` — project setup, templates, emulators, development builds - `integration-privy` — add Privy accounts and sessions on top of this wallet connection - `seeker-genesis-token` — verify Seeker device ownership after connecting - `seeker-domains` — display `.skr` names instead of raw addresses ## Links - Wallet UI: https://wallet-ui.dev - MWA docs: https://docs.solanamobile.com/react-native/overview - Solana Kit: https://www.solanakit.com

相关技能

Agent 工作流

Skill Creator

创造有效技能指南。 当用户想创造出新的技能(或更新现有的技能),以专业知识,工作流程,或工具集成来扩展克洛德的能力时,应该使用这种技能.

Agent 工作流

Clawdhub

使用ClawdHub CLI搜索,安装,更新并发布从taladhub.com的代理技能. 需要获取苍蝇上的新技能时使用,将安装的技能同步到最新版本或特定版本,或者发布 npm-instainddhub CLI 的新/更新的技能文件夹.

Agent 工作流

Agent Team Orchestration

管弦乐团多代理团队,任务设定周期,交接协议,审查工作流程. 使用时间: (1)建立2+特派员队伍,具有不同专业,(2)确定任务路线和生命周期(收录框_ spec_建设_审查_完成),(3)在特派员之间制定交接协议,(4)建立审查和质量关口,(5)管理特派员之间的交流和文物共享.

Agent 工作流

Superpowers

Spec-first,TDD,子代理驱动的软件开发工作流程. 当:(1)构建任何新功能或应用——触发脑暴_计划_子代理执行回路,(2)调试出一个bug或测试失败——触发系统性的根起过程,(3)用户说"让我们构建","帮助我计划","我想添加X",或"这个被打破",(4)完成一个功…