核心关键词: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('用户拒绝授权或钱包未解锁');
  }
}返回值说明:
publicKey(string) – 当前账户的十六进制公钥,可直接用于展示身份或进入下一步签名。
对事件进行 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 三要素签名节点逻辑:
- 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
);注意:
- 两端都需支持 NIP-04 才能顺利握手。
 - 传输链路可使用 HTTPS 保护,链上仅存放加密结果。
 
事件监听:实时捕获账户切换
如果你在多账户 UI 里需要动态切换头像或余额,可监听如下事件:
const handler = ({ accounts }) => {
  console.log("账户切换为", accounts[0]);
  // 拉取新链上数据
};
// 绑定
window.okxwallet.nostr.on('accountChanged', handler);
// 适当时机解绑
window.okxwallet.nostr.off('accountChanged', handler);扩展场景与代码示例
- DEX 闪电接单  
通过钱包拿到签名 Order,调用 DEX API 完成链下撮合,再回传链上结算。 - NFT 签名上架  
构造铸造事件,签名后立即发到 Nostr relay,提升铸造成本的透明度。 - DeFi 借款授权  
先 fetch 公钥 -> 签名授权事件 -> 触发智能合约放款逻辑。 
常见问题(FAQ)
Q1:如果用户没有安装插件钱包,怎么优雅提示?  
A:在代码最外层检查 window.okxwallet?.nostr,为 undefined 时弹出模态框:“请安装兼容钱包后再试”。
Q2:DApp 是否需要自己保存私钥或助记词?  
A:不需要。Injected Provider API 永不暴露私钥,所有签名行为都在钱包内完成,DApp 只拿到签名结果。
Q3:同一个事件能否重复签名?  
A:可以,每次签名都会重新计算 id 与 sig,但大多数 Relay 会做去重校验,重复提交通常被忽略。
Q4:NIP-04 加密后的消息能否被第三方解密?  
A:只有持有对应私钥的钱包才能解密,中继服务器只能做透明转发。
Q5:如何测试账户切换事件?  
A:在插件钱包 UI 一键切换账户,控制台即可看到 accountChanged 的回调触发与数据结构。
Q6:签名的交易事件是否可以回退?  
A:Nostr 协议无回滚,但你可以再签发一条补充事件更新老状态,Relay 会按时间线排序展示最新结果。
结尾随笔
Injected Provider API 让 连接钱包 的门槛降到接近传统 OAuth 登录,只需 3 行代码即可拥有完整 Web3 钱包 体验。无论是构建 DEX、社交 NFT 还是链游,该接口都已成为事实标准。把它融入产品,不仅提升用户留存,也为后续接入 DEX API 打下坚实的网关基础。现在就去实验吧——代码都替你先跑通了!