Injected Provider API 实战:在 DApp 里连接浏览器插件 Web3 钱包

·

核心关键词:Injected Provider API、Web3 钱包、连接钱包、DEX API、NOSTR、签名事件、加密消息、事件监听

什么是 Injected Provider API?

Injected Provider API 是一段 JavaScript 运行时接口,由浏览器插件 Web3 钱包 在访问页面时静默注入
它相当于 DApp 与链上世界之间的高速公路网关:

对开发者来说,核心对象就是 window.okxwallet.nostr。只需一行代码,就能让你的 DApp 拥有 连接钱包 的全部能力。

👉 想亲自动手看看注入对象长什么样?点此为你展示完整 Demo


获取注入对象:一行代码搞定

const nostr = window.okxwallet.nostr;
// 如果 !nostr,提示用户安装兼容插件
if (!nostr) alert('请先在浏览器安装支持 Nostr 协议的 Web3 钱包');

至此,DApp 便可通过统一的 Injected Provider API 与不同品牌钱包通信,无需关心底层实现差异。


快速上手:获取用户公钥(代码片段)

async function connectWallet() {
  try {
    const publicKey = await window.okxwallet.nostr.getPublicKey();
    console.log('已连接用户公钥:', publicKey);
    document.querySelector('#login-btn').innerText = '已连接';
  } catch (e) {
    alert('用户拒绝授权或钱包未解锁');
  }
}

返回值说明:


对事件进行 Nostr 签名

用户在去中心化社交平台发布帖子时,你需要先构造事件对象,再通过 DEX API 发起签名:

const unsignedEvent = {
  kind: 1,               // 文本事件
  created_at: Date.now(),
  tags: [["t", "web3"]],
  content: "Hello Nostr!"
};

const signedEvent = await window.okxwallet.nostr.signEvent(unsignedEvent);
// 返回 SignedEvent,包含 id、pubkey、sig 三要素

签名节点逻辑:

完成后,可直接广播到中继服务器;操作流程在 DEX、NFT 市场等其他场景中通用。

👉 把完整签名事件推到链上的实战案例,点击查看


消息的加密与解密(NIP-04 标准)

加密私信是社交类 DApp 的核心场景。示例代码如下:

// 加密给指定 pubkey 的消息
const cipher = await window.okxwallet.nostr.nip04.encrypt(
  "对方公钥字符串",
  "秘密内容"
);

// 解密收到的消息
const plain = await window.okxwallet.nostr.nip04.decrypt(
  "发送者公钥字符串",
  cipher
);

注意:


事件监听:实时捕获账户切换

如果你在多账户 UI 里需要动态切换头像或余额,可监听如下事件:

const handler = ({ accounts }) => {
  console.log("账户切换为", accounts[0]);
  // 拉取新链上数据
};

// 绑定
window.okxwallet.nostr.on('accountChanged', handler);

// 适当时机解绑
window.okxwallet.nostr.off('accountChanged', handler);

扩展场景与代码示例

  1. DEX 闪电接单
    通过钱包拿到签名 Order,调用 DEX API 完成链下撮合,再回传链上结算。
  2. NFT 签名上架
    构造铸造事件,签名后立即发到 Nostr relay,提升铸造成本的透明度。
  3. DeFi 借款授权
    先 fetch 公钥 -> 签名授权事件 -> 触发智能合约放款逻辑。

常见问题(FAQ)

Q1:如果用户没有安装插件钱包,怎么优雅提示?
A:在代码最外层检查 window.okxwallet?.nostr,为 undefined 时弹出模态框:“请安装兼容钱包后再试”。

Q2:DApp 是否需要自己保存私钥或助记词?
A:不需要。Injected Provider API 永不暴露私钥,所有签名行为都在钱包内完成,DApp 只拿到签名结果。

Q3:同一个事件能否重复签名?
A:可以,每次签名都会重新计算 idsig,但大多数 Relay 会做去重校验,重复提交通常被忽略。

Q4:NIP-04 加密后的消息能否被第三方解密?
A:只有持有对应私钥的钱包才能解密,中继服务器只能做透明转发。

Q5:如何测试账户切换事件?
A:在插件钱包 UI 一键切换账户,控制台即可看到 accountChanged 的回调触发与数据结构。

Q6:签名的交易事件是否可以回退?
A:Nostr 协议无回滚,但你可以再签发一条补充事件更新老状态,Relay 会按时间线排序展示最新结果。


结尾随笔

Injected Provider API 让 连接钱包 的门槛降到接近传统 OAuth 登录,只需 3 行代码即可拥有完整 Web3 钱包 体验。无论是构建 DEX、社交 NFT 还是链游,该接口都已成为事实标准。把它融入产品,不仅提升用户留存,也为后续接入 DEX API 打下坚实的网关基础。现在就去实验吧——代码都替你先跑通了!