第三章:用户故事
定义完整的功能需求和验收标准
3.1 Epic 概览
BFM Pay 的功能需求组织为 10 个 Epic:
| Epic | 名称 | 核心用户故事 |
|---|---|---|
| 1 | 拥有钱包 | 创建、导入钱包 |
| 2 | 查看资产 | 余额查看、链切换 |
| 3 | 转账 | 发起转账、扫码 |
| 4 | 收款 | 展示收款码 |
| 5 | 质押 | Mint/Burn |
| 6 | 安全设置 | 应用锁、备份 |
| 7 | 地址管理 | 地址簿 |
| 8 | DWEB 交互 | 授权、签名 |
| 9 | 个性化 | 语言、货币 |
| 10 | 我的 | 设置入口 |
Epic 1: 我想拥有一个自己的钱包
作为一个新用户,我想创建自己的数字钱包,以便开始管理我的数字资产。
Story 1.1: 首次启动引导
场景:用户首次打开 App
主线流程:
- 展示产品价值介绍(3页轮播)
- "便捷转账 - 随时随地管理资产"
- "多链支持 - 无限可能"
- "全面安全 - 资产更安全"
- 点击"开始使用"或"我有钱包"
- 进入创建/导入选择
验收标准:
- [ ] 轮播页最多 3 页,可跳过
- [ ] 跳过后不再显示(记录到 localStorage)
- [ ] 支持左右滑动切换
Story 1.2: 创建新钱包
场景:用户选择创建新钱包
主线流程:
设置钱包锁 → 生成助记词 → 备份提示 → 验证助记词 → 创建成功步骤详情:
| 步骤 | 用户操作 | 系统响应 |
|---|---|---|
| 1 | 绘制图案(至少4点) | 实时显示连接点数 |
| 2 | 确认图案 | 检查一致性 |
| 3 | 点击下一步 | 生成 12 词助记词 |
| 4 | 点击"显示助记词" | 展示助记词(默认模糊) |
| 5 | 点击"我已备份" | 进入验证步骤 |
| 6 | 填写 3 个随机位置的词 | 验证正确性 |
| 7 | 点击"完成创建" | 派生多链地址,跳转首页 |
支线流程:
- 用户点击"稍后备份" → 首页显示"未备份"警告
异常处理:
| 异常 | 提示 | 处理 |
|---|---|---|
| 图案点数不足 | "请至少连接4个点" | 禁用下一步 |
| 两次图案不一致 | "两次图案不一致" | 禁用下一步 |
| 助记词验证错误 | "第X个单词不正确" | 允许重试 |
Story 1.3: 导入已有钱包
场景:用户已有助记词或私钥
助记词导入流程:
选择词数 → 输入助记词 → 设置钱包锁 → 导入成功私钥导入流程:
选择链 → 输入私钥 → 设置钱包锁 → 导入成功验收标准:
- [ ] 支持 12/24 词助记词
- [ ] 支持助记词粘贴自动分词
- [ ] 私钥导入仅导入单链地址
- [ ] 导入后派生所有支持的链地址
Epic 2: 我想查看我的资产
作为钱包用户,我想随时查看我的资产情况,了解我有多少钱。
Story 2.1: 查看资产总览
场景:用户登录后进入首页
页面结构:
┌─────────────────────────────────┐
│ [钱包名称 ▼] [链名称 ▼] │ ← 钱包/链切换
├─────────────────────────────────┤
│ │
│ ┌───────────────────┐ │
│ │ 钱包卡片 │ │
│ │ 地址: 0x71C... │ │
│ │ [复制] [二维码] │ │
│ └───────────────────┘ │
│ │
│ [转账] [铸造] [收款] │ ← 快捷操作
│ │
├─────────────────────────────────┤
│ [资产] [DP] │ ← Tab 切换
├─────────────────────────────────┤
│ ┌─────────────────────────┐ │
│ │ ETH 10.5 ETH │ │
│ │ USDT 1,000 USDT │ │
│ │ ... │ │
│ └─────────────────────────┘ │
└─────────────────────────────────┘验收标准:
- [ ] 下拉刷新更新余额
- [ ] 点击代币进入详情页
- [ ] 支持切换资产/DP 视图
- [ ] 离线时显示缓存数据
Story 2.2: 切换钱包/链
钱包切换:
- 点击钱包名称
- 底部弹出钱包列表
- 选择目标钱包
- 刷新首页数据
链切换:
- 点击链名称
- 底部弹出链列表
- 选择目标链
- 刷新首页数据
验收标准:
- [ ] 保持最近选择的钱包/链
- [ ] 切换时显示加载状态
- [ ] 切换后余额自动更新
Epic 3: 我想给别人转账
作为钱包用户,我想把代币转给别人,完成支付或转移。
Story 3.1: 发起转账
主线流程:
输入地址 → 输入金额 → 确认详情 → 验证钱包锁 → 发送成功页面结构:
┌─────────────────────────────────┐
│ ← 发送 │
├─────────────────────────────────┤
│ │
│ 当前链: Ethereum │
│ │
│ 收款地址 │
│ ┌─────────────────────────┐ │
│ │ 输入或粘贴地址 [扫] │ │
│ └─────────────────────────┘ │
│ │
│ 金额 │
│ ┌─────────────────────────┐ │
│ │ 0.00 [全部]│ │
│ └─────────────────────────┘ │
│ 可用: 10.5 ETH │
│ │
│ 网络费用: ~0.002 ETH │
│ │
│ ┌─────────────────────────┐ │
│ │ 确认发送 │ │
│ └─────────────────────────┘ │
└─────────────────────────────────┘异常处理:
| 异常 | 提示 | 处理 |
|---|---|---|
| 地址格式错误 | "地址格式不正确" | 禁用发送 |
| 余额不足 | "余额不足" | 禁用发送 |
| 手续费不足 | "ETH 余额不足以支付手续费" | 提示充值 |
| 收款地址是自己 | "收款地址不能与发送地址相同" | 禁用发送 |
Story 3.2: 扫码转账
主线流程:
- 点击扫码按钮
- 相机扫描二维码
- 解析地址(可能包含金额)
- 自动填入表单
- 继续转账流程
验收标准:
- [ ] 支持从相册选择
- [ ] 支持解析带金额的二维码
- [ ] 扫描超时 60 秒提示
Epic 4: 我想收款
作为钱包用户,我想让别人给我转账。
Story 4.1: 展示收款码
页面结构:
┌─────────────────────────────────┐
│ ← 收款 │
├─────────────────────────────────┤
│ │
│ ┌───────────────────┐ │
│ │ │ │
│ │ [二维码图片] │ │
│ │ │ │
│ └───────────────────┘ │
│ │
│ 0x71C7656EC7ab88b098defB... │
│ │
│ [复制地址] │
│ │
│ 当前链: Ethereum │
│ │
└─────────────────────────────────┘验收标准:
- [ ] 二维码包含完整地址
- [ ] 支持复制地址
- [ ] 支持保存二维码到相册
- [ ] 可选设置收款金额
Epic 5: 我想进行跨链质押
作为进阶用户,我想通过质押外链代币获取内链代币。
Story 5.1: Mint 代币
场景:用户想用 USDT 铸造 USDM
主线流程:
选择质押代币 → 选择获取代币 → 输入数量 → 确认 → 等待完成前置条件:
- 钱包必须同时支持质押链和目标链
验收标准:
- [ ] 显示 1:1 兑换关系
- [ ] 显示预估到账时间
- [ ] 支持查看质押历史
Epic 6: 我想保护我的钱包安全
作为用户,我希望我的钱包是安全的,不会被他人使用。
Story 6.1: 设置应用锁
主线流程:
- 进入设置 → 应用锁
- 开启钱包锁
- 绘制钱包锁图案验证
- 设置成功
验收标准:
- [ ] 支持钱包锁(九宫格图案锁)
- [ ] 支持指纹锁(需先开启钱包锁)
- [ ] 支持指纹支付
Story 6.2: 备份助记词
主线流程:
- 进入钱包管理 → 备份
- 绘制钱包锁图案验证
- 显示安全提示
- 展示助记词
- 完成确认验证
验收标准:
- [ ] 验证图案后才能查看
- [ ] 提醒用户确保周围无人
- [ ] 完成后消除"未备份"警告
Epic 7: 我想管理常用地址
作为频繁转账的用户,我不想每次都手动输入地址。
Story 7.1: 地址簿管理
功能:
- 添加地址(名称 + 链 + 地址)
- 编辑地址
- 删除地址
- 转账时选择地址
验收标准:
- [ ] 按链分类显示
- [ ] 支持搜索
- [ ] 转账成功后提示保存
Epic 8: 我想与 DApp 交互
作为 Web3 用户,我想用钱包连接和使用 DApp。
Story 8.1: 地址授权
场景:DApp 请求获取钱包地址
流程:
- DApp 发起
getAddress请求 - 钱包弹出授权页
- 显示 DApp 信息和请求内容
- 用户选择授权范围
- 验证钱包锁确认
- 返回地址信息
授权类型:
- 单钱包授权:当前钱包的所有链地址
- 单链授权:指定链的所有钱包地址
- 全部授权:所有钱包的所有地址
Story 8.2: 签名授权
签名类型:
| 类型 | 场景 | 风险等级 |
|---|---|---|
| 消息签名 | 登录验证 | 低 |
| 转账签名 | 发起转账 | 高 |
| 合约签名 | 智能合约交互 | 高 |
验收标准:
- [ ] 显示 DApp 来源信息
- [ ] 转账签名显示完整交易详情
- [ ] 高风险操作需验证钱包锁
Epic 9: 我想个性化我的钱包
作为用户,我想按自己的偏好使用钱包。
Story 9.1: 切换语言
支持语言:
- 简体中文 (zh-CN)
- 繁体中文 (zh-TW)
- English (en)
- 日本語 (ja)
- 한국어 (ko)
- العربية (ar) - RTL
验收标准:
- [ ] 切换后立即生效
- [ ] 记住用户选择
- [ ] 首次自动检测系统语言
Story 9.2: 设置货币单位
支持货币: USD, CNY, EUR, JPY, KRW 等
验收标准:
- [ ] 首页显示换算后的法币价值
- [ ] 汇率定期更新
- [ ] 默认使用 USD
Epic 10: "我的"页面
作为用户,我需要一个统一的入口管理所有设置。
页面结构
┌─────────────────────────────────┐
│ 👤 钱包名称 │
│ 0x71C7...976F │
├─────────────────────────────────┤
│ 📁 钱包管理 > │
│ 📒 地址簿 > │
├─────────────────────────────────┤
│ 🔒 应用锁 > │
│ 🔑 修改密码 > │
│ 📝 备份助记词 🔴 > │ ← 未备份红点
├─────────────────────────────────┤
│ 🌐 语言 简体中文 > │
│ 💰 货币单位 CNY > │
│ ⛓️ 链配置 > │
├─────────────────────────────────┤
│ ❓ 帮助与反馈 > │
│ ℹ️ 关于 > │
└─────────────────────────────────┘本章小结
- 10 个 Epic 覆盖完整用户旅程
- 每个 Story 包含主线流程、支线流程、异常处理
- 用户心智考量贯穿每个设计决策
- 验收标准明确,便于测试验证
下一篇
完成产品篇后,继续阅读 第二篇:设计篇,了解产品的交互和视觉设计。