一、什么是 “注入式” Provider API?
当你在浏览器中打开一个支持 WAX 网络的 DApp 时,OKX 浏览器插件会自动通过 注入 Provider API 把一套 JavaScript 接口插入页面。借助这套接口,DApp 可以在无需自行实现复杂私钥管理的前提下:
- 请求用户的 WAX 账户地址;
- 读取钱包当前所连链的实时 区块高度、资源节点 等信息;
- 调用钱包在用户本地安全环境内 签名交易;
- 监听 连接、断连、账号变更 等事件。
因此,Provider API 既是 DApp 与 浏览器扩展钱包 的“握手协议”,也是 DEX、GameFi 项目快速实现 WAX 钱包集成 的关键工具。
二、WAX 网络的特殊提醒:Scatter 协议全兼容
本文档的所有示例均遵循 Scatter Protocol,它是业内最早、最成熟的钱包交互标准之一。
这意味着,只要你的合约、前端类库曾经适配过 Scatter,即可 一行不改 地迁移到 OKX 钱包。想了解更多 Scatter 细节,可搜索关键词 scatter-js GitHub。
三、完整接入流程详解
1. 引入签名库 —— eosjs 先行
所有 签名交易(原生 Action、代币转账、NFT 铸造等)都离不开 eosjs:
import { Api, JsonRpc } from 'eosjs';
import { JsSignatureProvider } from 'eosjs/dist/eosjs-jssig';2. 判断是否已连接钱包
调用以下 API「一次性」验证:
const connected = await wax.isConnected(); // true / false流程思路是:
如果返回 true,则直接进入用户主界面;若为 false,则弹出一个“连接钱包”按钮。
3. 获取钱包信息
const walletInfo = await wax.getWalletInfo();
/*
示例返回
{
name: 'alice.wam',
authority: 'active',
publicKey: 'EOS6hEmj7kEQ...'
}
*/为空则返回 null,可以用作 账号选择器 的初始渲染依据。
4. 监听动态事件
| 事件名 | 触发场景 | 典型用例 |
|---|---|---|
connect | 用户点击“授权”并同意连接 | 自动刷新余额、开启实时行情 |
accountChanged | 用户在同一扩展内切换账户 | 重置只读 State、清缓存 |
disconnect | 用户主动断开、网页关闭扩展弹窗 | 回到首页提示“请重新连接钱包” |
示例代码:
wax.on('connect', () => {
location.reload();
});
wax.on('accountChanged', () => {
localStorage.clear();
});四、签名交易的实战范式
以最常用的「转账」为例:
const rpc = new JsonRpc('https://wax.greymass.com');
const api = new Api({ rpc, signatureProvider: new JsSignatureProvider([]) });
const actions = [{
account: 'eosio.token',
name: 'transfer',
authorization: [{ actor: walletInfo.name, permission: 'active' }],
data: {
from: walletInfo.name,
to: 'bob.wam',
quantity: '1.0000 WAX',
memo: '感谢你的NFT!'
}
}];
// 调用钱包安全签名
const tx = await wax.transact({ actions }, { blocksBehind: 3, expireSeconds: 120 });借助 Provider API 的 wax.transact,私钥永不出钱包,用户只需一次点击即可完成签名。
闪电测试:30 秒跑通最小可运行案例
- 前端:直接在 CodePen 新建 HTML 模板,无须打包;
- 核心 JS:引用
https://unpkg.com/[email protected]与https://cdn.jsdelivr.net/npm/wax/provider.min.js; - 👉 30 秒跑通你的第一个 WAX 钱包交互,点一下即可看到完整代码与一键复刻教程。
FAQ:开发者最常见的疑问
Q1:为什么有时 isConnected() 在同一域名仍然返回 false?
A:浏览器的隐私设置(例如无痕模式或 Cookie 限制)会导致扩展拿不到 localStorage,进而判断为未连接。引导用户回到普通标签页即可。
Q2:Scatter 协议未来会不会停止更新?
A:Scatter 已过渡为 EOS 生态社区维护项目。官方变更频率极低,再保持 3-5 年向前兼容性仍可放心。
Q3:如何为移动端浏览器(无扩展)提供 Plan B?
A:使用 WebUSB / WebAuthn 轻钱包 或 WalletConnect 桥接。Provider API 依然可在 PC 与手机之间共用同一份逻辑层。
Q4:在 GameFi 场景需要高频调用,如何避免一次次授权弹窗?
A:初始化时仅需 一次连接授权,后续所有签名事务基于 Session Token 完成,无须重复弹窗。
五、最佳实践与性能优化
- 先缓存后请求:首次拿到
accountChanged事件后,把 pubkey 与用户名映射写到本地,减少下次识别时间。 - 断路封装:把
isConnected/ transact为核心的一套 Promise 封装在单独 service,统一监控错误码,页面层只需调用即可。 - 资源节点心跳:每 60 秒向 RPC 节点触发
get_info,若head_block_time超过 5 秒未更新,则显示出错提示。 - 👉 秒上线!DEX 场景自动化部署工具 —— 单击获取部署脚本,内置 Provider API 与网关健康检查。
小结
借助 WAX Provider API,开发者无需研究链上私钥即可安全、快速完成 DEX、GameFi、NFT 交互等所有场景。从 连接钱包 到 签名交易,整套流程已沉淀成“Copy & Paste”级模板;关键是你能够依据 Scatter 兼容性原则 在未来任何平台的浏览器扩展之间一触即通。