钱包集成
写一个与用户钱包对话的 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 会端到端加密。
下一步
- TypeScript SDK——ethers wrapper 细节
- 机密性模型——用户签名到底授权了什么