用途:在 React Native Expo 应用中连接 Solana 钱包、签名与发送交易,通过 Mobile Wallet Adapter(MWA)实现,由 @wallet-ui/react-native-kit 封装(旧技术栈用 @wallet-ui/react-native-web3js)。
前提与选型:MWA 需要 Android 开发构建,Expo Go 无法使用;若项目还没有开发构建,先参考 solana-mobile 技能。先查 package.json:已有 @wallet-ui/react-native-kit 或尚无 Solana 客户端时使用 kit 技术栈;已有 @wallet-ui/react-native-web3js 则参考 web3js 文档。不要混用两者,其 provider 属性、hook 返回值和交易构造均不兼容。
用法:在根布局挂载 MobileWalletProvider,用 createSolana* 辅助函数构建集群(如 createSolanaDevnet),需提供 cluster 与 identity,并在其上层放置 @tanstack/react-query 的 QueryClientProvider。通过 useMobileWallet 获取 account、connect、disconnect、client、chain、sendTransactions、signAndSendTransaction、signTransaction、signMessages、signIn 等。connect() 需包裹 try/catch,用户取消选择钱包属正常结果。signAndSendTransaction 需第二个参数 minContextSlot;kit 的 RPC 调用须调用 .send() 才会执行;余额为 bigint lamports。
适用场景:添加连接钱包、读取链上数据、发送交易、Solana 登录、消息签名等功能。
限制:Expo Go 不可用;无 connected 布尔值(用 !!account 推导);kit 暴露 client 而非 connection;查询键需包含 chain 以免缓存串网;sendTransactions 在钱包提交后即返回,需自行确认签名。调试可用 npx solana-mobile@latest playground 判断是钱包还是应用问题。