Skip to content

Commit 025ac38

Browse files
committed
docs: Improve the WalletConnect overview document
1 parent 276c4e1 commit 025ac38

File tree

2 files changed

+338
-0
lines changed

2 files changed

+338
-0
lines changed
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# WalletConnect 安装和使用指南
2+
3+
## 安装
4+
5+
在 DApp 中使用 WalletConnect 时,可以安装 WalletConnect JavaScript 客户端库:
6+
7+
```bash
8+
npm install @walletconnect/client
9+
```
10+
11+
对于钱包提供方,需要集成 WalletConnect SDK(提供 iOS、Android 和 Web 版本)。
12+
13+
## 基本使用
14+
15+
### 步骤 1:初始化 WalletConnect 客户端
16+
17+
在 JavaScript/TypeScript 代码中,导入并初始化 WalletConnect 客户端:
18+
19+
```javascript
20+
import WalletConnect from "@walletconnect/client";
21+
import QRCodeModal from "@walletconnect/qrcode-modal";
22+
23+
// 创建 WalletConnect 客户端实例
24+
const connector = new WalletConnect({
25+
bridge: "https://bridge.walletconnect.org", // 必填项
26+
qrcodeModal: QRCodeModal,
27+
});
28+
```
29+
30+
### 步骤 2:检查连接并创建会话
31+
32+
如果没有已建立的连接,则创建一个新会话,提示用户连接钱包。
33+
34+
```javascript
35+
// 检查是否已连接
36+
if (!connector.connected) {
37+
// 创建新会话
38+
await connector.createSession();
39+
}
40+
41+
// 监听会话事件
42+
connector.on("connect", (error, payload) => {
43+
if (error) {
44+
throw error;
45+
}
46+
47+
// 连接成功
48+
const { accounts, chainId } = payload.params[0];
49+
});
50+
51+
connector.on("session_update", (error, payload) => {
52+
if (error) {
53+
throw error;
54+
}
55+
56+
// 更新的账户和链ID
57+
const { accounts, chainId } = payload.params[0];
58+
});
59+
60+
connector.on("disconnect", (error, payload) => {
61+
if (error) {
62+
throw error;
63+
}
64+
65+
// 已断开连接
66+
});
67+
```
68+
69+
### 步骤 3:发送交易
70+
71+
连接成功后,即可与区块链进行交互。例如,发送一笔交易:
72+
73+
```javascript
74+
// 设置交易详情
75+
const tx = {
76+
from: accounts[0], // 用户地址
77+
to: "0xRecipientAddress",
78+
value: "0xAmountInWei", // 金额,单位为 wei
79+
data: "0x", // 可选数据
80+
};
81+
82+
// 发送交易请求
83+
const result = await connector.sendTransaction(tx);
84+
```
85+
86+
## 高级配置
87+
88+
### 多链支持
89+
90+
要支持多个区块链网络,可以在初始化时配置:
91+
92+
```javascript
93+
const connector = new WalletConnect({
94+
bridge: "https://bridge.walletconnect.org",
95+
qrcodeModal: QRCodeModal,
96+
chainId: 1, // 默认以太坊主网
97+
supportedChainIds: [1, 56, 137] // 支持的链ID:以太坊、BSC、Polygon
98+
});
99+
```
100+
101+
### 自定义配置
102+
103+
```javascript
104+
const connector = new WalletConnect({
105+
bridge: "https://your-custom-bridge.com",
106+
qrcodeModal: QRCodeModal,
107+
clientMeta: {
108+
name: "Your DApp",
109+
description: "Your DApp Description",
110+
url: "https://your-dapp.com",
111+
icons: ["https://your-dapp.com/icon.png"]
112+
}
113+
});
114+
```
115+
116+
## 错误处理最佳实践
117+
118+
### 连接错误处理
119+
120+
```javascript
121+
connector.on("connect", (error, payload) => {
122+
if (error) {
123+
console.error("连接错误:", error);
124+
// 实现重试逻辑
125+
return;
126+
}
127+
// 连接成功处理
128+
});
129+
130+
// 自定义错误处理
131+
try {
132+
await connector.createSession();
133+
} catch (error) {
134+
if (error.message.includes("User rejected")) {
135+
console.log("用户拒绝连接");
136+
} else {
137+
console.error("创建会话失败:", error);
138+
}
139+
}
140+
```
141+
142+
### 交易错误处理
143+
144+
```javascript
145+
try {
146+
const result = await connector.sendTransaction(tx);
147+
} catch (error) {
148+
if (error.message.includes("insufficient funds")) {
149+
console.error("余额不足");
150+
} else if (error.message.includes("gas")) {
151+
console.error("Gas 费用估算失败");
152+
} else {
153+
console.error("交易失败:", error);
154+
}
155+
}
156+
```
157+
158+
## 安全性考虑
159+
160+
### 数据加密
161+
162+
- 确保所有敏感数据在传输前进行加密
163+
- 不要在客户端存储私钥或助记词
164+
- 使用安全的通信协议(HTTPS)
165+
166+
### 交易安全
167+
168+
- 在发送交易前进行金额和地址验证
169+
- 实现交易确认对话框
170+
- 显示详细的交易信息供用户确认
171+
172+
### 会话管理
173+
174+
- 定期检查会话状态
175+
- 实现自动断开连接的超时机制
176+
- 在用户离开应用时清理会话数据
177+
178+
## 性能优化
179+
180+
- 使用 WebSocket 保持连接状态
181+
- 实现重连机制
182+
- 缓存常用数据
183+
- 批量处理交易请求
184+
185+
## 常见问题
186+
187+
- **二维码未显示**:请确保 `QRCodeModal` 正确导入并配置。
188+
- **连接问题**:请检查桥接 URL,默认桥接为 `"https://bridge.walletconnect.org"`,也支持自托管桥接。
189+
- **断开连接**:检查网络状态,确保 WebSocket 连接正常。
190+
- **交易失败**:验证账户余额、Gas 费用设置是否合理。
191+
- **兼容性问题**:确认钱包版本是否支持当前协议版本。
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
# WalletConnect 概述
2+
3+
## 简介
4+
5+
**WalletConnect** 是一个开放协议,允许用户将加密钱包安全地连接到去中心化应用(DApps),并支持多区块链网络的交互。用户只需扫描二维码或使用深度链接,即可与 DApp 进行交互,而无需暴露私钥,提供了安全、便捷的体验。
6+
7+
WalletConnect 通过加密消息在钱包与 DApp 之间传递信息,确保安全性。此外,WalletConnect 还支持多链和多会话连接,已广泛应用于 DeFi 和 NFT 平台等 Web3 领域。
8+
9+
## 功能
10+
11+
- **多链支持**:WalletConnect v2 支持跨多个区块链网络的连接,用户可以在单一会话中管理多链资产。
12+
- **安全消息传递**:所有通信均加密,确保钱包和 DApp 之间的交互安全。
13+
- **灵活的会话管理**:支持多会话,用户可以轻松在不同 DApps 和区块链网络之间切换。
14+
- **简单的集成方式**:DApp 和钱包开发者可以使用 WalletConnect SDK 快速集成,并支持广泛的钱包连接。
15+
- **跨平台兼容**:支持 iOS、Android 和 Web,确保用户在各种设备上都能访问。
16+
17+
## 技术架构
18+
19+
### 核心组件
20+
21+
1. **Bridge Server**
22+
- 作为中继服务器,负责在钱包和 DApp 之间传递加密消息
23+
- 采用分布式架构,提高可用性和性能
24+
- 支持 WebSocket 长连接,实现实时通信
25+
26+
2. **Client SDK**
27+
- 提供多语言支持(JavaScript、Swift、Kotlin等)
28+
- 封装核心协议逻辑,简化开发流程
29+
- 内置安全机制和错误处理
30+
31+
3. **协议层**
32+
- 定义标准消息格式和通信流程
33+
- 实现跨平台兼容性
34+
- 支持协议版本升级和向后兼容
35+
36+
### 连接流程
37+
38+
1. DApp 创建连接请求并生成二维码
39+
2. 用户使用钱包扫描二维码
40+
3. 建立加密通道
41+
4. 进行身份验证和授权
42+
5. 开始安全通信
43+
44+
## 安全机制
45+
46+
### 加密方案
47+
48+
- **非对称加密**:使用 X25519 密钥交换
49+
- **对称加密**:采用 AES-256-CBC 加密消息内容
50+
- **消息认证**:使用 HMAC-SHA256 确保消息完整性
51+
52+
### 安全特性
53+
54+
1. **零信任架构**
55+
- 所有通信均端到端加密
56+
- Bridge Server 无法解密消息内容
57+
- 每个会话使用唯一的密钥对
58+
59+
2. **权限控制**
60+
- 细粒度的操作授权
61+
- 支持会话过期和主动断开
62+
- 可限制特定链和方法的访问
63+
64+
## 应用场景
65+
66+
### DeFi 应用
67+
68+
- 去中心化交易
69+
- 流动性提供
70+
- 收益耕作
71+
- 借贷平台
72+
73+
### NFT 交易
74+
75+
- 市场交易
76+
- 铸造操作
77+
- 拍卖参与
78+
- 版税管理
79+
80+
### GameFi
81+
82+
- 游戏资产管理
83+
- 道具交易
84+
- 成就奖励
85+
- 跨游戏互操作
86+
87+
## 性能优化
88+
89+
### 连接优化
90+
91+
1. **快速重连**
92+
- 缓存会话信息
93+
- 支持自动重连
94+
- 优化重连流程
95+
96+
2. **网络适应**
97+
- 动态超时调整
98+
- 自动重试机制
99+
- 网络状态监控
100+
101+
### 资源管理
102+
103+
- 优化内存使用
104+
- 减少网络请求
105+
- 高效的状态同步
106+
107+
## 最佳实践
108+
109+
### 开发建议
110+
111+
1. **错误处理**
112+
- 实现完整的错误处理逻辑
113+
- 提供用户友好的错误提示
114+
- 记录详细的错误日志
115+
116+
2. **用户体验**
117+
- 显示连接状态和进度
118+
- 提供清晰的操作引导
119+
- 实现平滑的断开重连
120+
121+
### 安全建议
122+
123+
- 定期更新 SDK 版本
124+
- 实施请求频率限制
125+
- 验证所有用户输入
126+
- 实现会话超时机制
127+
128+
## 未来发展
129+
130+
### 技术路线
131+
132+
1. **协议升级**
133+
- 支持更多加密算法
134+
- 优化消息传输效率
135+
- 增强安全性能
136+
137+
2. **功能扩展**
138+
- 支持更多区块链网络
139+
- 提供更丰富的API
140+
- 增加开发者工具
141+
142+
### 生态建设
143+
144+
- 扩大合作伙伴网络
145+
- 建立开发者社区
146+
- 提供更多学习资源
147+
- 举办技术研讨会

0 commit comments

Comments
 (0)