跳到主要内容

钱包集成

写一个与用户钱包对话的 dApp 前端与以太坊几乎一致。钱包处理签名,你的 dApp 通过客户端 SDK 处理 OXN 特有的加密。本页覆盖钱包集成路径。

通过 wallet_addEthereumChain 加入 MetaMask

提示用户把 OXN 测试网加进 MetaMask:

async function addOxnTestnet() {
try {
await window.ethereum.request({
method: "wallet_addEthereumChain",
params: [{
chainId: "0xba", // 186
chainName: "OXN Testnet",
nativeCurrency: {
name: "TBLUAI",
symbol: "TBLUAI",
decimals: 18
},
rpcUrls: ["https://rpc.bout.network"],
blockExplorerUrls: ["https://explorer.bout.network"]
}]
});
} catch (err) {
console.error("Failed to add network:", err);
}
}

从用户手势(点击按钮)触发——否则 MetaMask 会屏蔽弹窗。注意某些 MetaMask 版本在纯 HTTP 下不会弹窗;用 HTTPS 或提供手动指引作为回退。

请求账户访问

async function connect() {
const accounts = await window.ethereum.request({
method: "eth_requestAccounts"
});
console.log("Connected:", accounts[0]);
}

标准 EIP-1102。确认用户授权你的 dApp 读取地址。

通过 MetaMask 签名交易

用户连上 OXN 测试网的 MetaMask 后,用 ethers.js 与浏览器 provider:

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

const browserProvider = new ethers.BrowserProvider(window.ethereum);
const signer = wrapEthersSigner(await browserProvider.getSigner());

// 现在每笔交易都端到端加密
const tx = await signer.sendTransaction({
to: "0xRecipient",
value: ethers.parseEther("0.1"),
gasLimit: 100_000n
});

Wrap 在客户端做。MetaMask 签的是外层交易(data 已加密),但不会解密或处理 payload。

WalletConnect

WalletConnect v2 支持把 OXN 测试网作为自定义 EVM 链。在项目的 WalletConnect 配置里注册链元数据:

const projectId = "your-walletconnect-project-id";

const metadata = {
name: "My OXN dApp",
description: "...",
url: "https://...",
icons: ["https://.../icon.png"]
};

const chains = [{
chainId: 186,
name: "OXN Testnet",
currency: "TBLUAI",
explorerUrl: "https://explorer.bout.network",
rpcUrl: "https://rpc.bout.network"
}];

用 OXN SDK 把结果 provider wrap 起来做加密调用。

EIP-6963(多钱包发现)

现代 dApp 应该通过 EIP-6963 支持钱包发现,而不是假设 window.ethereum 存在:

window.addEventListener("eip6963:announceProvider", (event) => {
const provider = event.detail.provider;
const info = event.detail.info;
console.log("Wallet:", info.name, info.icon);
// 用这个特定的 provider
});

window.dispatchEvent(new Event("eip6963:requestProvider"));

任何支持 OXN 的 EVM 兼容钱包(MetaMask、Rabby 等)都能通过这种方式被发现。

OXN 网页钱包

没有已装钱包的用户可以用 OXN 网页钱包。它预配 OXN 且不需要"添加网络"流程。

如果你的 dApp 面向可能没装钱包的用户,两条路都提供:

  • "连接钱包"——MetaMask、WalletConnect 等
  • "用 OXN 钱包"——深度链接到 wallet.bout.network 带你的 dApp URL

加密交易的 UX

用户签一笔加密交易时看到:

  • to 地址(可见)
  • value 字段(可见)
  • data 字段——一大段 hex(加密信封)

MetaMask 不会解码加密的 data,因为它做不到——payload 用 enclave 的密钥加密。你的 dApp UI 应该在用户点 MetaMask 确认按钮前解释他在签什么,避免让他看不透明的 hex 字节。

推荐的签名前概要:

你即将:
- 在 `0xToken...` 上调用 `transfer(0xRecipient, 100 tokens)`
- 发送:0 TBLUAI
- Gas limit:500,000
- Payload 会端到端加密。

下一步