午夜咖啡午夜咖啡

jolestar 的文章与笔记。

Post

Move 为什么不需要 Approve

2022-10-20 09:56:53Post

用通俗语言解释 Move 交互模型和授权模式的差异。

最近关于 Move 智能合约为什么“不需要 approve” 的讨论很多。这个问题表面看是在讨论授权模型,实际上背后是两种完全不同的资产和合约组织方式。

在 EVM 里,每个合约都像一个独立的小世界。用户进入某个合约世界时,只能直接操作那个世界里的状态。比如你要在 swap 合约里使用 USDT,但 USDT 的余额其实记录在 USDT 合约那个世界里,所以只能先执行 approve,告诉 USDT 合约:某个 swap 合约可以代你动用这部分资产。然后你再去 swap 合约里完成交易。

这套机制的问题在于:approve 和真正的交易往往是分开的。为了节省 gas,很多用户授权后并不会及时 revoke。一旦被授权的合约出现漏洞,资产就可能在用户不知情的情况下被盗走。

Move 的设计思路不一样。它更像是所有合约都运行在同一个更大的数字世界里,用户的数字分身可以带着自己的资产,在不同合约之间自由移动。用户的资产默认保存在自己的存储空间中,因此从 swap 入口进入、提取资产、完成交换、再把结果写回去,可以在同一笔交易里原子化完成。

这就是为什么 Move 不需要 approve:它不是在每个合约之间做“代理授权”,而是直接把用户和资产带进同一个统一执行环境里。

当然,这不是说 Move 天生就没有安全挑战。相反,它把问题换了一个地方:既然用户可以在一个大世界里跨合约移动,那钱包和浏览器就必须更清楚地告诉用户,这笔交易到底动了哪些资产,会产生什么状态变化。

我觉得 Move 在这里至少有两个优势:

  1. 可以在预执行阶段把状态变化更完整地展示给用户。
  2. Move 没有 EVM 那种任意地址的动态调用,合约逻辑在部署时更确定,因此更容易做静态分析和风险提示。

所以 Move 不需要 approve,不是因为它少了一步,而是因为它背后的执行模型和资产模型本来就不同。这种差异真正值得看的,不只是“更方便”,而是它后面可能带来的组合方式和安全模型变化。

原微博中的媒体