深入解析 WAX 区块链 Provider API:连接扩展钱包与 DEX 集成的完整指南

·

一、什么是 “注入式” Provider API?

当你在浏览器中打开一个支持 WAX 网络的 DApp 时,OKX 浏览器插件会自动通过 注入 Provider API 把一套 JavaScript 接口插入页面。借助这套接口,DApp 可以在无需自行实现复杂私钥管理的前提下:

  1. 请求用户的 WAX 账户地址
  2. 读取钱包当前所连链的实时 区块高度、资源节点 等信息;
  3. 调用钱包在用户本地安全环境内 签名交易
  4. 监听 连接、断连、账号变更 等事件。

因此,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 APIwax.transact,私钥永不出钱包,用户只需一次点击即可完成签名。


闪电测试:30 秒跑通最小可运行案例


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 完成,无须重复弹窗。


五、最佳实践与性能优化

  1. 先缓存后请求:首次拿到 accountChanged 事件后,把 pubkey 与用户名映射写到本地,减少下次识别时间。
  2. 断路封装:把 isConnected/ transact 为核心的一套 Promise 封装在单独 service,统一监控错误码,页面层只需调用即可。
  3. 资源节点心跳:每 60 秒向 RPC 节点触发 get_info,若 head_block_time 超过 5 秒未更新,则显示出错提示。
  4. 👉 秒上线!DEX 场景自动化部署工具 —— 单击获取部署脚本,内置 Provider API 与网关健康检查。

小结

借助 WAX Provider API,开发者无需研究链上私钥即可安全、快速完成 DEX、GameFi、NFT 交互等所有场景。从 连接钱包签名交易,整套流程已沉淀成“Copy & Paste”级模板;关键是你能够依据 Scatter 兼容性原则 在未来任何平台的浏览器扩展之间一触即通。