题目
用户报告:他在 A 标签页完成了交易,切到 B 标签页看到的仍是旧余额;还有一次他在两个标签页分别提交了交易,第二笔直接报错。
请说明这两个现象的成因,以及你的状态层需要具备哪些能力才能收敛。
考察目标
- 能否识别标签页之间状态互不可见的问题。
- 是否理解持久化与状态广播的差别。
- 能否给出避免重复提交的方案。
考察多标签页场景下的状态同步,以及连接标识与链状态的一致性维护。
用户报告:他在 A 标签页完成了交易,切到 B 标签页看到的仍是旧余额;还有一次他在两个标签页分别提交了交易,第二笔直接报错。
请说明这两个现象的成因,以及你的状态层需要具备哪些能力才能收敛。
账户 nonce 是链上账户状态中的序号,不能简单等同于用户在页面发起的交易数:EIP-7702 授权也可能使它递增。两个标签页若自行分配相同 nonce,提交时可能冲突。标签页各有内存状态;可用 storage 事件或 BroadcastChannel 通知另一页重新读取链上状态,并让钱包管理交易 nonce,应用层只协调同一业务动作的重复提交。
accountsChanged、在链变化时发出 chainChanged,这两个事件是标签页内状态更新的输入(依据:EIP-1193 §Events)createConfig 的 storage 参数持久化连接状态,页面重新加载后可以恢复(依据:wagmi:createConfig §Parameters 的 storage)state.connections 等状态与订阅接口,状态变化可以驱动界面重读(依据:wagmi:createConfig §State 的 connections)发现这道题有问题? 反馈此题