Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
11ef8d6
feat(security): replace password input with pattern lock
Gaubee Dec 25, 2025
9c1cd49
feat(security): implement bidirectional encryption for wallet lock
Gaubee Dec 25, 2025
1f27386
feat(settings): add mnemonic verification option for wallet lock reset
Gaubee Dec 25, 2025
e8ddadf
fix(security): allow immediate pattern input during error animation
Gaubee Dec 25, 2025
7206337
fix(security): reduce pattern lock mis-touch during swipe
Gaubee Dec 25, 2025
505d16b
feat(ui): add chain icon system, fee edit modal, and chain address di…
Gaubee Dec 25, 2025
3482ee3
feat(wallet): add ChainIconProvider for automatic icon resolution
Gaubee Dec 25, 2025
f9b0f14
feat(app): inject ChainIconProvider at app root
Gaubee Dec 25, 2025
fc0c1a0
fix(icons): use official token icons from legacy-apps
Gaubee Dec 25, 2025
bd8f2b5
feat(wallet): add TokenIcon system with auto-resolution
Gaubee Dec 25, 2025
ad2ac6b
refactor(icons): reorganize icons by chain with fallback support
Gaubee Dec 25, 2025
fe9929e
feat(icons): add tokenIconBase multi-layer fallback support
Gaubee Dec 25, 2025
17ccd6f
fix(token-icon): reset state when symbol/chainId changes
Gaubee Dec 25, 2025
a647535
refactor(token-icon): merge token/token-icon into wallet/token-icon
Gaubee Dec 25, 2025
a447ec6
fix(token-item): use TokenIcon component with proper sizing
Gaubee Dec 25, 2025
855d07a
fix(token-icon): integrate aspect-square and responsive sizing into s…
Gaubee Dec 25, 2025
95a5a89
refactor: replace PasswordInput with PatternLock for wallet verification
Gaubee Dec 25, 2025
45cedd5
refactor(i18n): replace password terminology with pattern lock
Gaubee Dec 25, 2025
36d2868
refactor(migration): replace password step with PatternLock verification
Gaubee Dec 25, 2025
7bd3f83
refactor(i18n): clean up obsolete password keys from security.json
Gaubee Dec 25, 2025
59b5a03
refactor: rename passwordLockEnabled to walletLockEnabled
Gaubee Dec 25, 2025
bcfad56
refactor: update comments and docs from 钱包密码 to 钱包锁
Gaubee Dec 25, 2025
1f21cec
docs: update white-book terminology from password to patternKey/walle…
Gaubee Dec 25, 2025
2735b4b
docs(white-book): comprehensive terminology update from password to p…
Gaubee Dec 25, 2025
6a09bb0
fix(e2e): fix remaining walletPassword parameter name
Gaubee Dec 25, 2025
2fc1d93
refactor(i18n): update authorize texts from password to pattern
Gaubee Dec 25, 2025
9e7f598
fix(i18n): update settings.json passwordError to patternError
Gaubee Dec 25, 2025
2672126
Merge branch 'main' into feat/transaction-ui-optimization
Gaubee Dec 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
# 资金账号助记词 - 用于提供测试资金(24个中文词,空格分隔)
E2E_TEST_MNEMONIC="词1 词2 词3 词4 词5 词6 词7 词8 词9 词10 词11 词12 词13 词14 词15 词16 词17 词18 词19 词20 词21 词22 词23 词24"

# 钱包密码
# 钱包锁
E2E_TEST_PASSWORD="your-test-password"
6 changes: 4 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ jobs:
pnpm install --frozen-lockfile

if [ "${{ steps.changes.outputs.code }}" == "true" ]; then
TASKS="typecheck:run build i18n:run test:run e2e:ci"
# 运行所有 E2E 测试:Dev + Mock + Real(真实转账)
TASKS="typecheck:run build i18n:run test:run e2e:ci e2e:ci:mock e2e:ci:real"
else
TASKS="typecheck:run build i18n:run test:run"
fi
Expand Down Expand Up @@ -114,7 +115,8 @@ jobs:
E2E_TEST_MNEMONIC: ${{ secrets.E2E_TEST_MNEMONIC }}
run: |
if [ "${{ steps.changes.outputs.code }}" == "true" ]; then
pnpm turbo run typecheck:run build i18n:run test:run e2e:ci
# 运行所有 E2E 测试:Dev + Mock + Real(真实转账)
pnpm turbo run typecheck:run build i18n:run test:run e2e:ci e2e:ci:mock e2e:ci:real
else
pnpm turbo run typecheck:run build i18n:run test:run
fi
Expand Down
53 changes: 51 additions & 2 deletions CHAT.md
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ The above error occurred in the <SendPage> component.

---

1. `pnpm agent` 的多种功能,需要通过“子命令”的方式来开启
1. `pnpm agent` 的多种功能,需要改进成通过“子命令”的方式来开启
2. 新增一个子命令`worktree`:
1. create:就是到.git-worktree创建工作空间, 这里创建出来后,要顺便执行依赖安装,还有把我们的`.env.local`文件复制到新工作空间中
2. delete:就是删除.git-worktree创建出来的某个工作空间中, 删除之前要使用gh命令检查一下分支是否有对应的pr,pr有没有合并. 如果检查有问题应该停止, 除非`--force`
Expand Down Expand Up @@ -592,7 +592,7 @@ bioChain的钱包的安全密码是这样的工作的:

---

为了进一步区分,我希望把“钱包锁”改成是一个九宫格的连线输入而不是密码框输入,这样就不会出现“请输入钱包锁”这种文字了,而是“请设置钱包锁”.
“钱包锁”改成是一个九宫格的连线输入而不是密码框输入,这样就不会出现“请输入钱包锁”这种文字了,而是“请设置钱包锁”.
要求至少连接4个点. 请你做这个组件的时候,尽量做好可访问性的支持,它本质其实就是一堆 checkbox, 只不过被渲染成九宫格,然后用滑动手势的方式来勾选这些checkbox. 当然我只是跟你解释这个可访问性的本质是什么.
具体的开发请你根据最好的使用提体验来做.
这个改动可能会比较大.
Expand All @@ -605,3 +605,52 @@ bioChain的钱包的安全密码是这样的工作的:
queryTx:`https://tracker.bfmeta.org/#/info/event-details/:signature`
queryAddress:`https://tracker.bfmeta.org/#/info/address-details/:address`
queryBlock:`https://tracker.bfmeta.org/#/info/block-details/:height`

---

需要完善我们的测试, 并发对中文英文两种同时进行测试, 从而避免AI开发的时候可能会忘记最佳实践, 直接在测试中使用了当前的语言环境去写测试.
使用双语测试可以有效检测出这类问题.

---

1. 导入钱包页面也要有 钱包锁的流程,目前没有
2. 导入钱包页面的返回不是返回,而是直接导航到首页,请你检查一下是否还有其它类似的问题, 统一修复
3. 目前设置页没有对应的的“启用网络”的功能,应该在钱包管理下面加一个 管理页面的入口吧

---

1. `Unknown route: /settings/wallet-chains` 说明你自己e2e测试都没通过.
2. 这个问题仍然没有修复:“使用WalletLock做验证的时候: 第一次输入错误的手势, 此时应该显示红色错误信息,然后过一会儿重置状态,让用户重新输入.”

---

1. send页面,要能显示当前账户的地址(发送者地址)
2. 钱包锁的修改要支持两种方案: 一种就是现在这种输入旧版密码, 一种是直接输入助记词

---

1. 点击网络手续费,都应该要能进行修改, 比如字符的确认面板, 或者设置安全密码的面板 ,都会展示“最低网络手续费”.
2. “设置安全密码的面板”中,会有一行小字:“BioForest Chain” ,这里应该换成“链”的图标+“地址”
3. mpay中有一整套关于链的图标,我们需要一整套统一的方案来渲染它

---

1. FeeEdit 功能建议使用Modal(stackflow 的 Modal ), 我们需要提供一种 PromptModal/FormModal(基于Modal,提供数据回传能力) 来支持这种能力
2. 我们的AddressDisplay组件是否支持chainName/chainIcon? 可以考虑优化AddressDisplay,或者在AddressDisplay的基础上封装出一种新的 复合组件
3. “链 SVG 图标系统” ,这里要和我们的“default-chains.json”进行关联, 从这个 default-chains.json 中来提供链图标, 然后进入 到我们的 service 体系中. 一定不可以将图标和我们的 service 进行强关联耦合.
- 请到这里文件夹`/Users/kzf/Dev/bioforestChain/legacy-apps/apps/btg-meta/src/components/icon/assets/images` 来复制图标.
- 这些是 Token图标, 在bio生态中, chainIcon就是使用 main-token 的 icon. mainToken 就是你 配置文件中的 symbol 字段
1. 请你梳理这些图标的命名, 使得更好管理, 或者用文件夹进行重新归类
2. 我们有了chainIcon,还需要有tokenIcon或者叫做symbolIcon, 同样的逻辑进行改造:升级配置文件(不用枚举所有token的图标,只需要给一个文件夹路径即可), 升级组件, 提供`Context+Provider`
3. tokenIcon要有一个fallbackUrl的能力,我们默认在本地 public 文件夹中提供了一些知名的流行的token,但是也需要提供一个网络版本的链接:`"https://bfm-fonts-cdn.oss-cn-hongkong.aliyuncs.com/meta-icon/{chain_short_name}/icon-{TOKEN_NAME}.png"`
- 这些图标是来自我们自己维护的github仓库的目录: https://github.com/BFChainMeta/fonts-cdn/tree/main/src/meta-icon
- 有了这个图标库+fallback机制,我们可以不更新APP的情况下,尝试从网络获取图标, 如果还是没有才进一步fallback成代码生成的样式

---

我发现有一些情况下, i18n的key会指向一个不存在的key,导致界面渲染出非正常文本.
目前的`i18n:check`检查不出这种问题, 有什么建议吗?

---

使用 yargs 统一重构 `pnpm agent`和子命令
5 changes: 5 additions & 0 deletions docs/white-book/00-必读/best-practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,8 @@
- ❌ 明文选择器 → ✅ data-testid
- ❌ 安装新 UI 库 → ✅ shadcn/ui(已集成)
- ❌ 新建 CSS → ✅ Tailwind CSS
- ❌ text-secondary → ✅ text-muted-foreground 或 bg-secondary text-secondary-foreground(详见白皮书 02-设计篇/02-视觉设计/theme-colors)
- ❌ getByText('硬编码中文') → ✅ getByText(t('i18n.key')) 或 getByTestId
- ❌ password/Password(宽泛含义) → ✅ walletLock(钱包锁)/ twoStepSecret(安全密码)/ payPassword(支付密码)等具体命名
- 圆形元素必须使用 aspect-square 标记,与 w-*/h-*/size-* 不冲突,是规范要求
- 组件尺寸属性要考虑响应式布局,如 lg 尺寸应包含 @xs:w-12 等容器查询断点
8 changes: 4 additions & 4 deletions docs/white-book/00-必读/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,16 +127,16 @@ A: 你可能使用了 Radix Dialog 或自定义 `position: fixed`。这会与 St

### Q: 如何传递数据给 Sheet 并获取返回值?

A: 使用全局回调模式。参考 `PasswordConfirmSheetActivity` 的实现:
A: 使用全局回调模式。参考 `WalletLockConfirmJob` 的实现:

```tsx
// 设置回调
setPasswordConfirmCallback((password) => {
// 处理返回的密码
setWalletLockConfirmCallback((patternKey) => {
// 处理返回的图案密钥
});

// 打开 Sheet
push("PasswordConfirmSheetActivity", {});
push("WalletLockConfirmJob", {});
```

### Q: 什么时候用 BottomSheet,什么时候用 Modal?
Expand Down
32 changes: 16 additions & 16 deletions docs/white-book/01-产品篇/03-用户故事/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,15 @@ BFM Pay 的功能需求组织为 10 个 Epic:

**主线流程**:
```
设置密码 → 生成助记词 → 备份提示 → 验证助记词 → 创建成功
设置钱包锁 → 生成助记词 → 备份提示 → 验证助记词 → 创建成功
```

**步骤详情**:

| 步骤 | 用户操作 | 系统响应 |
|-----|---------|---------|
| 1 | 输入密码(8-20位) | 实时验证密码强度 |
| 2 | 确认密码 | 检查一致性 |
| 1 | 绘制图案(至少4点) | 实时显示连接点数 |
| 2 | 确认图案 | 检查一致性 |
| 3 | 点击下一步 | 生成 12 词助记词 |
| 4 | 点击"显示助记词" | 展示助记词(默认模糊) |
| 5 | 点击"我已备份" | 进入验证步骤 |
Expand All @@ -74,8 +74,8 @@ BFM Pay 的功能需求组织为 10 个 Epic:

| 异常 | 提示 | 处理 |
|-----|------|------|
| 密码不符合要求 | "密码需要8-20位" | 禁用下一步 |
| 两次密码不一致 | "两次密码不一致" | 禁用下一步 |
| 图案点数不足 | "请至少连接4个点" | 禁用下一步 |
| 两次图案不一致 | "两次图案不一致" | 禁用下一步 |
| 助记词验证错误 | "第X个单词不正确" | 允许重试 |

---
Expand All @@ -86,12 +86,12 @@ BFM Pay 的功能需求组织为 10 个 Epic:

**助记词导入流程**:
```
选择词数 → 输入助记词 → 设置密码 → 导入成功
选择词数 → 输入助记词 → 设置钱包锁 → 导入成功
```

**私钥导入流程**:
```
选择链 → 输入私钥 → 设置密码 → 导入成功
选择链 → 输入私钥 → 设置钱包锁 → 导入成功
```

**验收标准**:
Expand Down Expand Up @@ -172,7 +172,7 @@ BFM Pay 的功能需求组织为 10 个 Epic:

**主线流程**:
```
输入地址 → 输入金额 → 确认详情 → 输入密码 → 发送成功
输入地址 → 输入金额 → 确认详情 → 验证钱包锁 → 发送成功
```

**页面结构**:
Expand Down Expand Up @@ -295,13 +295,13 @@ BFM Pay 的功能需求组织为 10 个 Epic:

**主线流程**:
1. 进入设置 → 应用锁
2. 开启密码锁
3. 验证钱包密码
2. 开启钱包锁
3. 绘制钱包锁图案验证
4. 设置成功

**验收标准**:
- [ ] 支持密码锁
- [ ] 支持指纹锁(需先开启密码锁
- [ ] 支持钱包锁(九宫格图案锁)
- [ ] 支持指纹锁(需先开启钱包锁
- [ ] 支持指纹支付

---
Expand All @@ -310,13 +310,13 @@ BFM Pay 的功能需求组织为 10 个 Epic:

**主线流程**:
1. 进入钱包管理 → 备份
2. 验证钱包密码
2. 绘制钱包锁图案验证
3. 显示安全提示
4. 展示助记词
5. 完成确认验证

**验收标准**:
- [ ] 验证密码后才能查看
- [ ] 验证图案后才能查看
- [ ] 提醒用户确保周围无人
- [ ] 完成后消除"未备份"警告

Expand Down Expand Up @@ -354,7 +354,7 @@ BFM Pay 的功能需求组织为 10 个 Epic:
2. 钱包弹出授权页
3. 显示 DApp 信息和请求内容
4. 用户选择授权范围
5. 输入密码确认
5. 验证钱包锁确认
6. 返回地址信息

**授权类型**:
Expand All @@ -376,7 +376,7 @@ BFM Pay 的功能需求组织为 10 个 Epic:
**验收标准**:
- [ ] 显示 DApp 来源信息
- [ ] 转账签名显示完整交易详情
- [ ] 高风险操作需密码确认
- [ ] 高风险操作需验证钱包锁

---

Expand Down
12 changes: 6 additions & 6 deletions docs/white-book/02-设计篇/01-交互设计/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,28 +185,28 @@ BFM Pay

```
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
设置密码 │───►│生成助记词│───►│验证助记词│───►│ 创建成功 │
设置钱包锁│───►│生成助记词│───►│验证助记词│───►│ 创建成功 │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │
▼ ▼ ▼
密码校验 显示/隐藏 3词验证
图案确认 显示/隐藏 3词验证
```

**步骤指示器**:
```
●────────○────────○
密码 备份 验证
图案 备份 验证
```

### 转账流程

```
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 输入信息 │───►│ 确认详情 │───►│ 输入密码 │───►│ 发送成功 │
│ 输入信息 │───►│ 确认详情 │───►│ 验证钱包锁│───►│ 发送成功 │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │
▼ ▼ ▼
地址+金额 显示手续费 密码/指纹
地址+金额 显示手续费 图案/指纹
```

### DWEB 授权流程
Expand All @@ -222,7 +222,7 @@ BFM Pay
│ 选择授权范围
│ │
│ ▼
输入密码确认
验证钱包锁确认
│ │
◄─────────┘
返回地址数据
Expand Down
Loading