题目
用户在兑换页面点击确认后,交易进入等待打包状态。产品希望余额立刻变化,让用户感觉「已经生效」。
请分析这个做法成立的条件与风险,并说明如果不做乐观更新,界面应该如何表达等待状态。
考察目标
- 能否判断哪些链上状态可以乐观更新。
- 是否理解等待期间的多种结局。
- 能否给出回滚与展示的一致性方案。
考察乐观更新在链上场景的适用条件,以及回滚时的一致性处理。
用户在兑换页面点击确认后,交易进入等待打包状态。产品希望余额立刻变化,让用户感觉「已经生效」。
请分析这个做法成立的条件与风险,并说明如果不做乐观更新,界面应该如何表达等待状态。
等待期间界面上的余额属于界面状态:链上余额查询有区块参数,尚未打包的交易并不改变已出块状态的读数;拿到收据才能知道执行成功还是回滚,执行失败会回滚状态,但已消耗的 gas 照收。因此界面需要把展示层与链上读数分开,并为失败保留回滚路径。
latest 与 pending 的读数可能不同,因此界面上的乐观值与链上读数要分开存放(依据:EIP-1474 §eth_getBalance、§Block Identifier)。发现这道题有问题? 反馈此题