浏览器插件钱包 Injected Provider API:Solana 兼容链快速接入指南

·

如果你正计划让自己的去中心化应用(DApp)无缝连接 Solana 网络并与用户的钱包交互,这篇指南会帮你 一针见血、一步到位 搞懂浏览器插件钱包的 Injected Provider API。

什么是浏览器插件钱包的 Injected Provider API?

浏览器插件钱包通过 window.okxwallet.solana 对象把 Solana 兼容链 的 JavaScript API 注入到网页。开发者可凭此完成以下三件事:

换句话说,Injected Provider API 就是连接浏览器插件钱包与 DApp 的“隐形桥梁”。


连接账户:一行代码搞定权限申请

window.okxwallet.solana.connect()

使用方法

  1. 异步调用 connect() 会返回一个 Promise
  2. 用户确认 → Promise resolve,可立即拿到其公钥。
  3. 用户拒绝 → Promise reject,并在控制台抛出错误码。

返回对象中会附带 isConnected 布尔值,帮助你随时判断连接状态。

try {
  const resp = await window.okxwallet.solana.connect()
  console.log('已连接到:', resp.publicKey.toString())
} catch (err) {
  console.error('连接失败:', err)
}

👉 想要体验完整流程?试试这段实时演示吧。


签名交易:签、发两步走

签名并直接发送

signAndSendTransaction(transaction) 适合一键提交:

const tx = new Transaction().add(transfer)
const { signature } = await window.okxwallet.solana.signAndSendTransaction(tx)

只签名不发送

有时你需要自己控制节点 RPC,这时选 signTransaction(transaction)

const signedTx = await window.okxwallet.solana.signTransaction(tx)
// 自己发 Raw tx
await connection.sendRawTransaction(signedTx.serialize())

批量签名

一次搞定多笔交易:

const signedTxArr = await window.okxwallet.solana.signAllTransactions([tx1, tx2, tx3])

签名消息:零手续费验证地址所有权

若要为登录、权益证明或其他链外场景背书,只需:

  1. 准备一个 UTF-8 或十六进制编码的 Uint8Array
  2. 调用 signMessage(args)
const message = new TextEncoder().encode('Welcome to DEX!')
const signed = await window.okxwallet.solana.signMessage({ message })

返回的 signed.signature 即为链下无 gas 的签名结果,验证快捷方便。

👉 亲手试一试,30秒上手链消息签名。


生命周期事件:动态响应用户操作

事件名称触发场景典型用途
connect用户同意 DApp 的钱包连接请求时刷新 UI,显示余额
disconnect用户主动断开、插件上线/下线时清理状态,回到未登录页
accountChanged用户在插件内部切换子账户且已授权当前域名自动读到新账户公钥,重绘

示例监听:

window.okxwallet.solana.on('accountChanged', (newPubKey) => {
  if (newPubKey) updateUI(newPubKey)
  else redirectToConnect()
})

FAQ:开发者最关心的 5 个问题

  1. 问:用户关掉弹窗后怎么办?
    答:connect()reject,捕获异常后在 UI 上主动提示重试即可。
  2. 问:如何在移动端浏览器也能保持一致体验?
    答:浏览器插件钱包针对内部 WKWebView/Chrome Custom Tab 实现了 shim,API 名称保持一致,无需额外判断。
  3. 问:调试时为何获取不到 window.okxwallet.solana
    答:请确认已安装插件且明文协议为 https://,普通 http 站点出于安全策略会被屏蔽。
  4. 问:signTransaction 被标记已弃用怎么办?
    答:官方推荐新目录 signAndSendTransaction,老接口仍然可用,短期内无移除计划。
  5. 问:批量签名是否有限制?
    答:一次上限 10 笔交易,超过会自动分批处理,请合理分片请求降低失败概率。

最佳实践:提交流程与异常兜底

通过以上代码、范式与事件管理组合,你将轻松获得与 Solana 生态 DEX API、浏览器插件钱包、Solana 兼容链 完美匹配的 Web3 体验。祝开发顺利!