题目
你们接入了签名授权:用户签一段结构化数据即可授权,由后台提交链上交易。
上线后出现两类反馈:一是用户签完名后界面仍显示「未授权」,二是用户重复签名后提示失败。请说明这个中间态的本质,以及界面应该以什么作为「授权是否已生效」的判断依据。
考察目标
- 是否理解签名授权与链上授权之间的时间差。
- 能否找到判断「是否已被消费」的正确依据。
- 能否设计出不误导用户的中间态 UI。
考察签名授权的中间态:签名已产出、链上状态未变,判断依据是随机数而非额度。
你们接入了签名授权:用户签一段结构化数据即可授权,由后台提交链上交易。
上线后出现两类反馈:一是用户签完名后界面仍显示「未授权」,二是用户重复签名后提示失败。请说明这个中间态的本质,以及界面应该以什么作为「授权是否已生效」的判断依据。
签名本身不改变链上额度;有人成功调用 permit 后,EIP-2612 合约才会设置 allowance 并递增 nonces[owner]。界面应区分「已签名」「提交中」「已生效」和「失败」。核对具体交易的收据、目标代币的 nonce 与 allowance;只看 nonce 变化不能证明这份签名被消费,也可能是另一份授权先上链。
permit 成功执行时把 allowance[owner][spender] 设为签名中的 value,并把 nonces[owner] 加一,同时发出对应的 Approval 事件(依据:EIP-2612 §Specification)。deadline、owner 不是零地址、nonces[owner] 与签名中的 nonce 一致、签名有效;不满足则回滚(依据:EIP-2612 §Specification)。owner、spender、value、nonce、deadline 字段(依据:EIP-2612 §Specification;EIP-712 §Specification 的 domainSeparator)。deadline 是缓解方式之一,签名人可自行提交使先前签名失效(依据:EIP-2612 §Security Considerations)。nonces[owner] 与 allowance;nonce 增长可能由另一份 permit 导致,额度也可能被普通 approve 或 transferFrom 改变(依据:EIP-2612 §Specification;工程经验)。nonce,先提交的一份生效,需要向用户说明(依据:EIP-2612 §Specification 的 nonce 语义;多设备场景属于工程经验)。nonce 竞争(【协议保证】nonces[owner] 与签名一致是执行条件之一;依据:EIP-2612 §Specification)。发现这道题有问题? 反馈此题