跳到主要内容

将钱包集成到 OXN

如果你做钱包想加 OXN 支持,本指南覆盖钱包除了标准以太坊集成之外需要做的具体事。

基础:OXN 作为 EVM 链

从钱包角度看,OXN 是标准 EVM 兼容链。加到你支持的网络列表:

  • Chain ID:186
  • RPC:https://rpc.bout.network
  • 货币符号:TBLUAI,18 位小数
  • 浏览器:https://explorer.bout.network

程序化配置的完整 JSON 见测试网参数

OXN 对钱包的不同之处

标准 EVM 钱包签交易并显示 calldata 供用户审查。OXN 上:

  • Calldata 在客户端签名前加密
  • 机密代币的余额只有通过签名查询才可见。
  • 事件日志按调用者加密。

如果钱包只签 dApp 传的数据,严格说不需要任何改动。但要给用户好体验,钱包需要知道 OXN 的加密。

签加密交易

dApp 构造加密信封。钱包的工作是把加密 data 原样签外层交易:

{
to: "0xContractAddress",
data: "0xa3...", // 来自 dApp 的 CBOR 信封
value: 0,
gas: 500_000,
gasPrice: 100_000_000,
nonce: ...
}

钱包按签任何以太坊交易的方式签它。不需要解码加密 data

显示加密交易

用户看到外层交易——tovaluegas——但 data 字段是一大段人类不可读的 hex。改善 UX:

  • 检测 CBOR 信封前缀0xa00xbf),把交易标记为"Encrypted"。
  • 鼓励 dApp 在发起请求前显示明文摘要。
  • 不要试图解码加密数据——钱包没有 enclave 密钥无法解密。

显示机密代币余额

机密 ERC-20(见构建机密 ERC-20)通过明文 eth_callbalanceOf(user) 返回 0。想显示真实余额,钱包必须:

  1. 检测代币是机密的(通过某个约定方法或 dApp 提示)。
  2. 构造签名查询:用用户私钥签 eth_call payload。
  3. 发送签名查询。
  4. 用会话密钥解密响应。
  5. 显示返回的余额。

这要求钱包持私钥(本来就有)并在客户端实现 OXN 加密协议。

不想自己实现加密的钱包可以委托给 OXN SDK:

import { wrapEthersSigner } from "@oasisprotocol/sapphire-ethers-v6";

const wallet = new ethers.Wallet(privateKey, provider);
const wrapped = wrapEthersSigner(wallet);
// 用 wrapped 发签名查询

Deposit 与 Withdraw

OXN 有两种地址格式(见账户与地址)。用户在两者间移动价值:

  • Deposit:共识层 oxn1… → EVM 0x…
  • Withdraw:EVM 0x… → 共识层 oxn1…

大部分钱包可以跳过这部分——绝大多数 dApp 交互在 EVM 侧。用户需要时 OXN 网页钱包处理这个流程。

如果你的钱包目标是验证人质押(主网),你需要支持两种地址格式和 deposit / withdraw 操作。

移动钱包中的网络

iOS / Android 钱包用 WalletConnect 或直连 RPC 就能连 OXN 测试网。机密交易加密要么在 dApp(浏览器端)做、要么在钱包想一等支持时的原生 SDK 里做。

移动钱包想让机密特性工作:

  • 包含 OXN SDK 的原生等价物(Go / Rust 封装 X25519 + Deoxys-II),或
  • 从 TypeScript SDK 编 WASM 版本的加密库。

测试你的集成

  • 把 OXN 测试网加进你的钱包。
  • 从水龙头资助测试地址。
  • 对另一个地址做简单转账。
  • 部署或与机密合约交互。
  • 通过签名查询确认余额正确显示。
  • 测试错误处理:交易被拒、网络错误、错链。

下一步