NOIR WALLET / V2 · 2026-11-12 · 第二轮逐项复核

PR81 产品验收报告

55 条原反馈 + 追加 Add Account,共 56 条。A / B / C 是原文三组编号;条目编号与组内“图几”分别标注。已有明确方向的产品要求直接实现;待设计仅保留明确交给 @Mency 的未定方案。混合条目在结论中拆开说明。

基线:PR81 · cb4ca51。修改位于独立工作树,未推送。截图点击可查看原尺寸。

本轮复核更正

验证范围

A1

Private 收款提示过长

明确需求已落实 · 真实 MV3 验证通过

收款选择器原有长警告和独立按钮;按指定短文案改为句内入口。

处理:RecipientSelector 中 Moves from Shield Account 可点击。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图1,说明文案篇幅占用过大,文案改为:Private Account only accepts Moves from Shield Account. 然后Moves from Shield Account高亮可以点击即可,不需要单独的按钮.
  • packages/extension/src/popup/components/transaction/RecipientSelector.tsx
A2

Send 地址与金额顺序

明确需求顺序已调整 · 细部样式待设计

EVM Send 将金额输入放在收款地址之前,和反馈的操作顺序不符。

处理:已将收款地址移到 Amount 前;@Mency 提到的金额左右样式仍由设计确认。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图2,你可以体验一下,说实话有点不顺手,选完地址之后,总会下意识去找哪里输入Amount,因为别的钱包都是先地址再Amount,从用户习惯来看,也是先选地址再输入Amount。@Mency 实在不行就将Amount设置放在to地址的后面,不要用现在的AmountUI,就有左右显示的样式.
  • packages/extension/src/popup/pages/transactions/EvmSendForm.tsx
A3

Public 转账缺预估时间

明确需求已落实 · 真实 MV3 验证通过

动态时间估算缺失时原来显示破折号;产品已明确要求链级兜底。

处理:动态估算优先,缺失时采用粗略链级预计时间(ETH 约 30 秒);这是操作预估,不是到账保证。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图2,public模式的native转账,没有预估时间,ETH写死30s,别的链也有自己的对应时间,可以让AI分析一下并HardCode即可.
  • packages/extension/src/popup/hooks/useEvmConfirmationEstimate.ts
  • packages/extension/src/popup/pages/transactions/EvmSendForm.tsx
A4

页面/弹框切换闪烁

待核实待复现

反馈未给具体切换路径、设备和闪烁帧;Move 的 picker 切换涉及异步数据和页面重绘。

处理:需真实扩展录屏/复现后定位具体闪烁层。

原始反馈与源码依据 / 原图
很多页面切换,仍旧有闪烁问题,例如从地址选择弹框切换到move UI.
  • packages/extension/src/popup/pages/transactions/Transfer.tsx
A5

Move 首次默认方向

明确 bug已落实 · 真实 MV3 验证通过

普通 Move 默认值与首页显式传入方向均受钱包模式影响;仅修默认值还会被首页参数覆盖。

处理:同时修正首页普通入口和草稿回退,默认 Public→Shield;显式路由、草稿及专用 Shield 入口保留原意图。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
Move UI默认Public到Shield,而不是Public到Private.
  • packages/extension/src/popup/pages/transactions/move-draft.ts
A6

From / To 卡片换行

明确需求同排布局已落实 · 实拍通过

From/To 卡片标签和账户名称分两行来自 DomainCard 布局。

处理:From/To 标签与账户名称改为紧凑同排;后续整体视觉由 @Mency 调整。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图3,这个UI总觉得别扭,From和Account1分为了两行,下面的To也是一样的问题 @Mency .
  • packages/extension/src/popup/pages/transactions/Transfer.tsx
A7

确认金额的点击弹框

明确需求已落实 · 真实 MV3 验证通过

确认页通用金额组件默认开启详情/复制弹层。

处理:Move 确认页金额直接显示完整精度,不再弹出金额详情。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图4,Move的Confirm UI,amount可以点击,点击后还有一个弹框?这个不需要吧.
  • packages/extension/src/popup/pages/transactions/Transfer.tsx
  • packages/extension/src/popup/components/common/AmountDisplay.tsx
A8

Move 地址显示过长

明确需求已落实 · 真实 MV3 验证通过

Move 确认页源地址和目标地址原来可能换行显示完整值。

处理:改为 0x 后前五位加末五位,完整值仍由已审核交易负载保留。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图4,From这里地址取0x后面前5后5显示就好了,没必要两行展示.
  • packages/extension/src/popup/pages/transactions/Transfer.tsx
A9

是否删除 Minimum receive

需解释已核对源码

报价同时返回 expectedOutputRaw 与 minimumOutputRaw;截图显示 2 USDC 和 1.99 USDC,不能假定无滑点或等额到账。

处理:保留 Minimum receive 作为真实报价下限;如要删除需先确认报价/执行契约。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图4,前一个UI没有地方设置滑点,那么这里也不应该有Minimum receive吧,我记得隐私充值目前没有滑点吧,充多少到账多少?麻烦确认一下 @Willa 如果是,去掉Minimum receive.
  • packages/extension/src/popup/pages/transactions/Transfer.tsx
  • packages/extension/src/core/services/confidential-funding/confidential-funding-model.ts
A10

合并手续费行

明确需求已落实 · 真实 MV3 验证通过

原确认页将报价费用与源链 gas 分列,二者币种和口径不同。

处理:合为 Estimated fee 一行,内部保留 Route 与 Network/Max network 各自数值。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图4,Estimate Fee和Network Fee合并,变成一个Estimate Fee即可.
  • packages/extension/src/popup/pages/transactions/Transfer.tsx
A11

Move Confirm 后跳转突兀

明确需求已落实 · 导航验证通过

原先确认后跳首页再开 Activity,或 Done 默认返回首页,打断连续操作。

处理:Shield 操作在原页展示 Activity;Send / Swap Done 返回发起表单,保留必要资产、模式和方向,清空金额与旧结果。显式 View Activity 仍可进入历史。

真实隔离 MV3,只读恢复合成 plan / Activity;未点击最终 Confirm,广播和意图提交计数为 0。状态与哈希为测试数据。

原始反馈与源码依据
图4,点击Confirm之后动画跳转有点突兀,瞬间关闭页面,回到首页,并弹出Receive框,动画需要优化.
  • packages/extension/src/popup/pages/transactions/Transfer.tsx
A12

Move 被标为 Receive

明确 bug语义修复实拍通过 · 版式待设计

自有账户 Move 的 shield deposit 记录被 operation=deposit 通用映射误称 Receive;扣款及目标到账是两笔账户效果,不应简单丢弃。

处理:自转标题改 Move;专属详情金额布局待设计。外部入金仍保留 Receive。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 合成已完成历史,只验证展示,不代表链上结算。

原始反馈与源码依据
图5,这个是Move的弹框,是专属的还是?首先标题不对,不是Receive,然后又有-2USDC,又有+2USDC,应该是Move的专属弹框UI。@Mency .
  • packages/extension/src/popup/components/transaction/multichain-activity-presentation.ts
  • packages/extension/src/popup/components/transaction/MultichainActivityDetail.tsx
A13

Route 单行展示

明确需求已落实 · 真实 MV3 展示通过

详情 Route 内容原有 245px 上限并允许换行。

处理:改为单行展示,在窄视口截断过长链名并保留完整 title。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 合成已完成历史,只验证展示,不代表链上结算。

原始反馈与源码依据
图5,Route放一行吧,放得下.
  • packages/extension/src/popup/components/transaction/MultichainActivityDetail.tsx
A14

Move direction 标签

明确 bug已落实 · 真实 MV3 展示通过

自转 Shield 详情的 Public→Shield 行标为 Account。

处理:自转时改为 Move direction。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 合成已完成历史,只验证展示,不代表链上结算。

原始反馈与源码依据
图5,Account后面显示的是Public-Shield,这个标题应该是Move Direction.
  • packages/extension/src/popup/components/transaction/MultichainActivityDetail.tsx
A15

Move Status 字段位置

明确需求已落实 · 真实 MV3 展示通过

Status 在日期后、手续费前。

处理:Move 详情将 Status 放到 Network fee 后;其他交易保持原位置。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 合成已完成历史,只验证展示,不代表链上结算。

原始反馈与源码依据
图5,Status放在NetworkFee下面.
  • packages/extension/src/popup/components/transaction/MultichainActivityDetail.tsx
A16

Shield processing 的重复交易哈希

明确 bug去重已修 · 展示与链接断言通过

Shield processing 的哈希与 Origin transaction 相同时是同一源链交易,无独立 Intents explorer 证据。

处理:仅隐藏重复中继哈希;真实不同的中继哈希仍显示,不伪造 explorer 链接。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 合成已完成历史,只验证展示;并以 DOM 断言源交易链接仅出现一次。

原始反馈与源码依据
图6,Shield Process下面没必要放转入的txHash,这里应该可以跳转NearIntents的Explore吗?我记得好像是看不到数据的,如果没有那就不需要任何数据,如果可以跳转,那么还是加一下对应的关联数据,并点击跳转Intents的Explore.
  • packages/extension/src/popup/components/transaction/MultichainActivityDetail.tsx
A17

Move 历史标题与布局

明确 bug语义修复实拍通过 · 版式待设计

历史列表把自转 Move 标为 Receive USDC→USDC。

处理:改为 Move;金额双向布局待设计确认。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 合成已完成历史,只验证展示,不代表链上结算。

原始反馈与源码依据
图7,这是Move的历史记录,也需要UI确认,目前展示不太对。@Mency .
  • packages/extension/src/popup/components/transaction/MultichainActivityRow.tsx
A18

Shield Send 缺少 BNB

明确 bug已落实 · 真实 MV3 验证通过

BNB 原生协议映射仍指向旧 Hot Bridge ID;当前目录使用 Omnibridge 资产。

处理:更新 BNB/POL/AVAX 映射并优先当前同合约代币;与 C7/C8 共用修复。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图8,Shield Send To目前没有BNB可选,需要加上.
A19

Slippage 控件过于显眼

需设计待设计

Slippage 设置的显著程度是视觉方案问题。

处理:需设计确认;本次未改。

原始反馈与源码依据 / 原图
图9,隐私Send有Slippage设置,这里的设置也太显眼了一点,就这样?@Mency .
  • packages/extension/src/popup/pages/portfolio/ShieldWithdrawPage.tsx
A20

Confidential funding asset catalog changed

明确 bug代码与核心用例通过 · 原报错待复现

前台与后台目录可能不同步。外部收款已有目录不匹配时刷新逻辑,但预览和准备交易原来没有,直接抛出目录变化错误。

处理:后台预览/准备前检测并刷新目录,保留严格资产校验。尚未用原 Send 目录竞态完整复现;不拿 Receive 选币截图充当此项通过证据。

原始反馈与源码依据 / 原图
图10,Confidential funding asset catalog changed,这个错误什么意思?点击retry可以正常预估.
  • packages/extension/src/background/index.ts
  • packages/extension/src/background/confidential-funding-coordinator.ts
B1

Network Fee 能否由收发差额计算

需解释无需代码修改

不能直接这样计算。发送量与接收量之差可能包含兑换、协议费用及滑点;当前 sourceNetworkFee 是服务端可选字段。

处理:仅展示有可靠来源的费用,缺失时不冒充网络费。

原始反馈与源码依据 / 原图
图1,是拿不到NetworkFee吗?如果是,可以通过接收到的数量和发送数量做减法.
  • packages/extension/src/popup/pages/portfolio/ShieldWithdrawPage.tsx
  • packages/extension/src/core/services/confidential-funding/confidential-funding-model.ts
B2

Shield Send 再次提示资产目录变化

明确 bug代码与核心用例通过 · 原报错待复现

与 A20 是同一类目录同步问题;不能把再次点击成功视为正常流程。

处理:后台预览/准备前检测并刷新目录,保留严格资产校验。尚未用原 Send 目录竞态完整复现;不拿 Receive 选币截图充当此项通过证据。

原始反馈与源码依据 / 原图
图2,Shield发送,点击Send后再次出现这个错误,但是此时没有retry按钮,此时再次点击底部的按钮会正常进入下一个窗口.
  • packages/extension/src/background/index.ts
  • packages/extension/src/background/confidential-funding-coordinator.ts
B3

预估时间 9 秒是否硬编码

需解释已核对源码

9 秒来自报价返回的 quoteTimeEstimateSeconds,并非页面固定常量;它是估计值,不是到账保证。

处理:保留服务端估计;实际耗时准确性需要路线实测。

原始反馈与源码依据 / 原图
图3,预估时间9s是hard code吗?确定正确吗.
  • packages/extension/src/popup/pages/portfolio/ShieldWithdrawPage.tsx
  • packages/extension/src/popup/services/shield-transfer.ts
B4

Shield Send 的 +金额容易误认为自己收入

明确 bug已落实 · 真实 MV3 展示通过

原来用交换摘要同时显示扣款和正向到账,容易把收款人到账误读为自身收入。

处理:保留关键到账数额,明确标为 Recipient receives,并移除误导性的 +。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 仅进入确认页,未点击最终 Confirm。

原始反馈与源码依据
图3,这里是Send的Confirm,USDC -2 到USDC +1.9789,什么意思,我们是Shield的Send,只有-2USDC,没有+.
  • packages/extension/src/popup/pages/portfolio/ShieldWithdrawPage.tsx
B5

Shield Send 确认页缺少来源 Provider

明确需求已落实 · 真实 MV3 展示通过

确认页有网络和收款人,但没有明确显示本次来源为 NEAR Confidential。

处理:在 From 中标记 Shield · NEAR Confidential。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 仅进入确认页,未点击最终 Confirm。

原始反馈与源码依据
图3,需要在Confirm弹框标记当前的From是Near Confidential。.
  • packages/extension/src/popup/pages/portfolio/ShieldWithdrawPage.tsx
B6

Send 结果页与 Move 的视觉统一

需设计待设计

涉及结果页结构、扣款与到账展示及字段顺序,不能仅用替换标题完成统一。

处理:明确语义错误已单独修复;整体版式与 C1、C15 一并设计。

原始反馈与源码依据 / 原图
图4,Send弹框和上面的Move一样的问题。@Mency .
  • packages/extension/src/popup/components/transaction/MultichainActivityDetail.tsx
B7

合并 authorization 与 processing

明确需求已落实 · 合成历史展示通过

Shield Send 的授权与中继分别显示,产品已经明确建议合并。

处理:合并为一个 Shield processing 展示项;底层阶段保留,授权失败/等待仍显示真实状态,只有存在中继时才合并。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 只读合成历史;状态、地址与哈希为测试数据,不代表真实结算。

原始反馈与源码依据
图4,Shield authorization和Shield processing是否可以合并为Shield Processing.
  • packages/extension/src/popup/components/transaction/multichain-activity-presentation.ts
B8

Send History 展示

需设计到账语义实拍通过 · 版式待设计

历史记录复用多链 Activity。收款人到账与自身收入的语义已区分,整体卡片仍需统一设计。

处理:与 B4、C15 共用展示规则,避免重复设计。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 只读合成历史;状态、地址与哈希为测试数据,不代表真实结算。

原始反馈与源码依据
图5,Send的History一样的问题。@Mency .
  • packages/extension/src/popup/components/transaction/MultichainActivityRow.tsx
B9

Zcash 地址顺序与 Resync 日期

需设计按钮位置已修 · 视觉待设计

原图 Shielded 地址本来就在 Transparent 上方,实际错位的是 Generate new shielded address 按钮位于透明地址之后。Resync 已支持 By Date。

处理:生成按钮移到 Shielded 下方。保留已知 birthday 为默认扫描起点,用户可改日期;直接默认今天可能漏扫历史资金。@Mency 的整体视觉另行设计。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图6,AI风太浓了,看看能不能优化一下。@Mency . a. 获取新的Shield地址在透明地址下面,可以交换一下透明和隐私地址的上下顺序. b. Resync需要设置新的Birthday date吧,默认填现在的时间,但是允许用户修改.
  • packages/extension/src/popup/pages/account/ZcashSettings.tsx
  • packages/extension/src/popup/components/account/AccountModals.tsx
B10

Receiving Address 收款页视觉风格

需设计待设计

原文第二组图7为 Receiving Address(收款二维码页),不是 Zcash settings。上版报告标题和结论误指 Zcash 设置,现已更正。

处理:原文明示 @Mency 确认收款页视觉方案;保留该项为需设计。

原始反馈与源码依据 / 原图
图7,也有点AI风,看看能不能优化 @Mency .
  • packages/extension/src/popup/components/common/ReceivingAddressLayout.tsx
B11

进入 Swap 的等待时间

待核实暖启动已测 · 冷启动待复现

真实 MV3 暖启动中,Swap 外壳立即显示,点击后 63ms 显示来源币;首帧有骨架。已有资产与账户缓存。

处理:当前证据不能复现原卡顿;保留待核实,需冷启动真实接口耗时定位,未叠加新的缓存层。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
Swap UI进入的卡点在哪里,能否在打开后立即显示,目前看起来是依赖了什么接口,可以提前缓存?.
  • packages/extension/src/popup/hooks/useSwapState.ts
  • packages/extension/src/popup/pages/swap/Swap.tsx
B12

Private / Shield Swap 默认币种

明确 bug已修复 · 两种模式实拍通过

Private 首次目录预取了不适用的 Zcash 链,筛选后无默认币种;Shield 普通入口缺少完整默认选择。

处理:Private 普通 Swap 优先预取账户已有 Private execution address 的 EVM 链,复用原默认选择逻辑。Shield 选有效来源及不同目标,优先 Ethereum USDC/ETH;余额未就绪或不足时仍禁止提交。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。 验证资产默认选择,不代表余额接口或真实成交验证。

原始反馈与源码依据
Swap UI只有public设置了默认token,private和Shield没有,需要加上.
  • packages/extension/src/popup/services/swap-token-selection.ts
  • packages/extension/src/popup/pages/portfolio/ShieldSwapPage.tsx
  • packages/extension/src/popup/services/shield-transfer.ts
  • packages/extension/src/config/intents.ts
B13

Swap 选币列表余额不正确

待核实原 BNB 场景待核实

原产品图为 BNB、已废弃 USDC/USDT 条目的余额展示。暖启动 Ethereum USDC 显示 10,与 Public 余额一致;总额 20 包含 Private 10,不能用总额判错。

处理:保留原图;Ethereum 实拍不能证明 BNB 问题已修。需核对原账户 BNB 当前/废弃资产 ID 与余额关联,不将未知余额硬写为 0。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图8,Swap页面的token选择页面,token的余额问题还是没有解决.
  • packages/extension/src/popup/components/swap/SwapTokenSelector.tsx
  • packages/extension/src/popup/services/swap-page-model.ts
B14

选币列表每次加载慢

待核实暖启动已测 · 原慢场景待复现

真实 MV3 暖启动选币列表 146ms 出现 USDC;已有目录及账户余额缓存。此结果不覆盖冷启动或真实接口慢请求。

处理:暂不做无依据的缓存重写,原性能问题保留待核实。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图8,token选择每次进入都要加载很久,需要有token列表和余额缓存,也需要提前获取.
  • packages/extension/src/popup/services/rhea-swap-client.ts
  • packages/extension/src/popup/services/swap-curated-catalog.ts
  • packages/extension/src/popup/components/swap/SwapTokenSelector.tsx
B15

preswap 名称、耗时与手续费

明确 bug名称已修复 · 数据能力待补

preswap-nearintents 是泄露到 UI 的内部路线名。当前 RHEA 报价模型没有可用的路线耗时和网络费字段。

处理:展示 NEAR Intents 名称和图标;耗时、费用需可靠服务数据,暂不伪造。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图9,什么是preswap,而且这里没有预估时间和预估手续费.
  • packages/extension/src/popup/components/swap/SwapInputView.tsx
  • packages/extension/src/core/services/rhea-swap/rhea-swap-model.ts
B16

Approve / Swap 执行步骤说明

明确需求已落实 · 确认页实拍通过

两步含义由实际执行模式决定。此次 evm-signature 路线第二步是签署 Swap Order,不是直接调用合约方法。

处理:显示 Step 1 的 Approve 数量与 spender、Step 2 的实际后续动作;此次显示 Sign Swap Order,不编造不存在的合约调用。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图10,底部的3个说明本身没问题,但是标题不对吧:Execution step,那么应该分step1,step2,Approve是Step1,Step1里approve了1.9789USDC,然后Approve的合约地址,还需要再显示Step2,调用了什么合约的什么方法.
  • packages/extension/src/popup/components/swap/SwapReviewView.tsx
  • packages/extension/src/popup/pages/swap/Swap.tsx
B17

金额点击后 Copy 弹框

明确需求已落实 · 交互验证通过

Swap 确认页使用相同金额详情组件,会弹出完整金额/复制层;按本次产品统一要求一并移除。

处理:关闭 Swap 确认页主金额及手续费金额的详情弹层,保留费率档位编辑;实测没有 Show full amount 按钮。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图10,这里的amount一样可以点击,然后弹出一个copy弹框,这是统一操作吗?.
  • packages/extension/src/popup/components/common/AmountDisplay.tsx
B18

Swap 确认按钮改为 Confirm

明确需求已落实 · 确认页实拍通过

这是按钮文案统一需求;授权阶段仍只发起 token approval,不能暗示 Swap 已完成。

处理:按钮改为 Confirm,同时保留 Step 1 授权金额与合约,辅助标签标明 token approval。

真实隔离 MV3,受控接口和公共测试向量;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图10,底部的按钮应该是Confirm,而不是Approve USDC.
  • packages/extension/src/popup/components/swap/SwapReviewView.tsx
  • packages/extension/src/popup/pages/swap/Swap.tsx
B19

Swap 报价有效期设为五分钟

明确需求已落实 · 核心期限用例通过

原 30 秒是钱包本地上限,并非服务端统一有效期;前一版将二者混为一谈。

处理:本地上限改为五分钟,仍取服务端 expiresAt 与本地上限中更早的截止时间。

原始反馈与源码依据 / 原图
Swap的过期时间设置为5分钟吧,目前很容易出发过期.
  • packages/extension/src/core/services/rhea-swap/rhea-swap-quote-validity.ts
B20

过期后在确认页接受新价格

需设计待设计

当前会丢弃旧准备结果,重新取价并返回输入页。留在确认页需要展示新旧变化和重新授权。

处理:设计确认页内的价格更新提示及再次确认;不得静默替换已审阅金额。

原始反馈与源码依据 / 原图
Swap如果价格过期,那么直接在Confirm页面告诉用户,是否接收当前最新的价格,如果接收,可以继续trade,而不需要返回上一个UI。需要设计一下 @Mency .
  • packages/extension/src/popup/pages/swap/Swap.tsx
C1

统一 Swap / Send / Move 结果页

需设计待设计

三类操作当前共用或组合不同的结果展示,字段及进度需要统一,但各自的扣款、到账和链上引用不能被混为同一语义。

处理:统一结果页规范:操作名称、来源/目标、进度、可用交易链接与完成动作。

原始反馈与源码依据 / 原图
图1,Swap trade之后的UI和send/move都不一样,process缺少对应的txHash和跳转,tx放在了底部,建议统一UI设计,显示的字段也不对,不是send和receive,应该是swap from to等。需要设计一下 [@Mency](https://ref-team-hq.slack.com/team/U05S3MRN0LB)
  • packages/extension/src/popup/components/transaction/MultichainActivityDetail.tsx
C2

Done 后留在发起操作页面

明确需求已落实 · 导航验证通过

原先确认后跳首页再开 Activity,或 Done 默认返回首页,打断连续操作。

处理:Shield 操作在原页展示 Activity;Send / Swap Done 返回发起表单,保留必要资产、模式和方向,清空金额与旧结果。显式 View Activity 仍可进入历史。

真实隔离 MV3:Send / Swap 各一次受控模拟 EVM 广播,Done 未再次提交;Move 使用合成已启动记录只读恢复,未最终确认,广播及意图提交均为 0。所有场景均无真实网络交易。

原始反馈与源码依据
图1,点击Done之后回到了首页,其实不只是Swap,包括send和move,都不要回到首页,在那个UI发起的就应该还留在哪里,因为用户可能连续操作
  • packages/extension/src/popup/pages/transactions/Transfer.tsx
  • packages/extension/src/popup/pages/portfolio/ShieldWithdrawPage.tsx
C3

Shield Send 多弹一次 Provider 选择

明确 bug已落实 · 真实 MV3 验证通过

Shield 总览在两种 Provider 都可用时仍先弹选择,和直达表单的要求不符。

处理:默认直达 NEAR Confidential Send;仅 Zcash 可用时进入 Zcash。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图2,Shield页面的Send点击后仍旧弹出了选择,应该去掉弹框
  • packages/extension/src/popup/pages/portfolio/ShieldFundsPage.tsx
C4

Send 页可切换 Confidential / Zcash

明确需求已落实 · 真实 MV3 验证通过

原来 Confidential 与 Zcash 分属两个 Send 页面,表单内不能直接切换。

处理:两页复用 Provider 选项,支持 Confidential ↔ Zcash 切换;按当前账户能力显示并在忙碌时禁用。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图3,send页面的Shield需要可以选择Confidential和Zcash
  • packages/extension/src/popup/pages/portfolio/ShieldWithdrawPage.tsx
  • packages/extension/src/popup/pages/transactions/Send.tsx
C5

Confidential 收款支持链数量

需解释实时目录与原图已核对

原图是 USDT 的可选网络:当前 1Click USDT 目录中的可用 EVM 来源恰好为 Ethereum、BNB、Optimism、Polygon、Avalanche、Gnosis,没有当前 Arbitrum/Base USDT 条目。

处理:按所选币种的当前路线显示网络。USDC 可选链不同;不把不支持的交易对加入选项。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图4,confidential的收款token选择,看起来链少了很多
C6

整理 Intents referral 使用清单

明确需求清单已整理 · 参数未改

原文包含“referral list 给 zero”,本轮按提供清单处理;没有充分依据把它解读成将推荐参数或手续费清零。

处理:列出各调用的 referral 与费用来源供核对,不擅自修改收费和推荐配置。

调用位置 / 用途Referral费用口径
Intents fetchQuote(EXACT_INPUT)noir_swap本地 appFees:35 bps(0.35%),recipient=noir_swap.near
RHEA SDK toSdkQuoteRequestextensions.referral=noir_swap本地该构造点未另设 appFees
Confidential EXACT_INPUT:Move / withdraw / internal swapnoir_swapwithdraw/internal swap 从 confidential-app-fee 服务获取;deposit 不在此附加 appFees
外部 Shield 收款 FLEX_INPUTnoir_swap该请求不附加本地 appFees
Confidential EXACT_OUTPUTnoir_swap从 confidential-app-fee 服务获取
Intents explorer 链接URL referral=noir_swap浏览器链接追踪参数,不是交易费用
原始反馈与源码依据 / 原图
所有涉及Intents的referral list给zero,目前看很多地方都没有区分referral,用的都是noir_swap
  • packages/extension/src/config/intents.ts
  • packages/extension/src/background/confidential-funding-api.ts
C7

BNB / POL / AVAX 桥迁移与 USDT 报价失败

明确 bug映射已修 · 线上报价未验

实时 1Click 目录同时返回旧 DEPRECATED 与新 Omnibridge 资产。原映射仍使用旧原生币 ID,同合约代币也可能先选到旧记录。

处理:更新当前桥资产映射、同合约优先非废弃记录。官方 dry quote 返回 401(需要认证);受控 BNB 地址页不代表 BNB USDT 线上交易对已恢复。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。 接收地址来自受控报价;官方实时报价返回 401,未创建线上订单。

原始反馈与源码依据
BNB, POL, and AVAX做了hot bridge到ominibridge的替换,所以看看是否影响了token的地址,需要调研看看,目前BNB收USDT不工作报错:Quoting for this pair is not available [@Jimi](https://ref-team-hq.slack.com/team/U063JHDVBUK)
  • packages/extension/src/config/asset-market-assets.ts
  • packages/extension/src/core/services/intents-evm-assets.ts
  • packages/extension/src/core/services/intents-managed-assets.ts
  • https://1click.chaindefuser.com/v0/tokens
C8

BNB 收款显示 deprecated

明确 bug已落实 · 真实 MV3 验证通过

原生 BNB 映射指向旧 Hot Bridge 资产,当前有效 ID 为 nep141:bnb.omdep.near。

处理:使用当前目录映射;废弃资产不再作为新收款选项。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
Shield收款,BNB的BNBtoken显示deprecated,为什么?
  • packages/extension/src/config/asset-market-assets.ts
  • packages/extension/src/popup/services/shield-deposit-options.ts
C9

切币种/链后旧错误未清除

明确 bug已落实 · 真实 MV3 验证通过

收款表单切换 token/network 时原错误状态没有同步清空。

处理:选择变化时清除旧错误与旧反馈,后续失败再显示对应新选择的错误。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。 两个独立场景分别验证 token / network 切换后旧错误消失。

原始反馈与源码依据
Shield收款,只要用户重新选择了token或者链,之前的错误信息应该自动隐藏
  • packages/extension/src/popup/pages/portfolio/ShieldDepositPage.tsx
C10

最低收款 0.300001 USDT 的来源

需解释已核对源码

金额来自 FLEX_INPUT 报价返回的最小 amountIn,不是前端硬编码,也不是钱包统一最低余额。

处理:保留实际报价最低入金金额;不同资产或报价时点可能不同。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图5,至少0.300001 USDT怎么来的
  • packages/extension/src/background/confidential-funding-coordinator.ts
C11

Refund address 解释及 Private 地址建议

明确需求已落实 · 真实 MV3 验证通过

EVM 可使用同链的 Private execution address 退款。上版将 Zcash 的透明地址限制错误泛化到 EVM。

处理:EVM 默认优先同链 Private 地址,缺少 Private 地址时保留有效 Public 回退;Zcash 仍使用透明退款地址。已添加问号说明,并验证请求 refundTo 与界面 Private 地址一致。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图5,refund address加一个问号,解释一下吧,然后Shield收款,refund应该是private地址,而不是public地址
  • packages/extension/src/popup/pages/portfolio/ShieldDepositPage.tsx
  • packages/extension/src/background/confidential-funding-coordinator.ts
C12

刷新按钮被误认为换地址

明确 bug已落实 · 真实 MV3 验证通过

右上角原刷新图标实际执行存款状态检查,而非生成新地址。

处理:现在显示 Check,语义为检查存款状态;生成地址仍是独立操作。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图6,点击右上角的刷新按钮,不是刷新地址吗?反而出现了这一句:Checked,Waiting Deposit
  • packages/extension/src/popup/pages/portfolio/ShieldDepositPage.tsx
C13

收款历史中的两个按钮过大

明确需求已落实 · 真实 MV3 验证通过

两个入金按钮的尺寸要求已经明确,不必等待整页设计。

处理:按钮缩为 36px 高、176px 最小宽度并收紧间距;整页风格仍可另行设计。

真实隔离 MV3,公共测试向量、受控接口;未广播、未提交 Confidential 意图。

原始反馈与源码依据
图7,红框的两个按钮UI,改一下吧,太突兀了,降低大小 [@Mency](https://ref-team-hq.slack.com/team/U05S3MRN0LB)
  • packages/extension/src/popup/pages/portfolio/ShieldDepositPage.tsx
C14

Pending deposit 何时取消

需解释已核对生命周期

未充值订单在三小时后停止自动轮询;已过期且创建满二十四小时后默认隐藏,可通过 Show all 查看。不会自动调用服务端取消订单。

处理:区分过期、停止轮询、默认隐藏和删除;如需自动清理,另定保留和审计策略。

原始反馈与源码依据 / 原图
图7,pending的deposit,什么时候会自动取消,用户可能会产生很多的数据
  • packages/extension/src/core/services/confidential-funding/confidential-external-deposit.ts
C15

Activity 全种类统一设计

需设计待设计

应覆盖 Send、Receive、Move、Swap、授权/合约调用,以及 pending、失败、退款等状态;不能只设计一张成功卡片。

处理:设计清单:Send、Receive、Shield/Move、Swap、Supply、Withdraw、Claim、Borrow、Repay、Approve、Cancel transaction、On-chain interaction;另覆盖进行中、完成、失败/取消/过期、退款和替换交易。列表与详情共用语义。

原始反馈与源码依据 / 原图
Activity显示的所有种类都设计一下吧,具体有哪些种类找下jimi [@Mency](https://ref-team-hq.slack.com/team/U05S3MRN0LB)
  • packages/extension/src/popup/components/transaction/multichain-activity-presentation.ts
  • packages/extension/src/popup/components/transaction/MultichainActivityDetail.tsx
  • packages/extension/src/core/transactions/domain/transaction.ts
D1

Add Account 仍使用旧 Zcash 弹窗

明确 bug已修复 · 真实 MV3 验证通过

新增账户使用独立旧组件,导入流程已经使用新的紧凑 UI,造成相同选择重复实现且展示不一致。

处理:提取共用 ZcashHistoryFields;两个入口复用。保留 unknown 主动选择、used 强制 restore 和日期/高度校验。

上一轮真实隔离 MV3 已通过,本轮未改变该流程。

原始反馈与源码依据
点击 AddAccount 还是默认弹出旧的 Zcash account history UI,应该复用新 UI。
  • packages/extension/src/popup/components/common/ZcashHistoryFields.tsx
  • packages/extension/src/popup/components/account/AddAccountZcashHistoryContent.tsx
  • packages/extension/src/popup/components/onboarding/ImportZcashHistorySheet.tsx
  • packages/extension/src/popup/pages/account/AccountList.tsx
  • 真实隔离 MV3:unknown、used、生日校验及创建账户通过;无资金广播。