Post
Move 为什么不需要 Approve
用通俗语言解释 Move 交互模型和授权模式的差异。
最近关于 Move 智能合约为什么“不需要 approve” 的讨论很多。这个问题表面看是在讨论授权模型,实际上背后是两种完全不同的资产和合约组织方式。
在 EVM 里,每个合约都像一个独立的小世界。用户进入某个合约世界时,只能直接操作那个世界里的状态。比如你要在 swap 合约里使用 USDT,但 USDT 的余额其实记录在 USDT 合约那个世界里,所以只能先执行 approve,告诉 USDT 合约:某个 swap 合约可以代你动用这部分资产。然后你再去 swap 合约里完成交易。
这套机制的问题在于:approve 和真正的交易往往是分开的。为了节省 gas,很多用户授权后并不会及时 revoke。一旦被授权的合约出现漏洞,资产就可能在用户不知情的情况下被盗走。
Move 的设计思路不一样。它更像是所有合约都运行在同一个更大的数字世界里,用户的数字分身可以带着自己的资产,在不同合约之间自由移动。用户的资产默认保存在自己的存储空间中,因此从 swap 入口进入、提取资产、完成交换、再把结果写回去,可以在同一笔交易里原子化完成。

这就是为什么 Move 不需要 approve:它不是在每个合约之间做“代理授权”,而是直接把用户和资产带进同一个统一执行环境里。
当然,这不是说 Move 天生就没有安全挑战。相反,它把问题换了一个地方:既然用户可以在一个大世界里跨合约移动,那钱包和浏览器就必须更清楚地告诉用户,这笔交易到底动了哪些资产,会产生什么状态变化。
我觉得 Move 在这里至少有两个优势:
- 可以在预执行阶段把状态变化更完整地展示给用户。
- Move 没有 EVM 那种任意地址的动态调用,合约逻辑在部署时更确定,因此更容易做静态分析和风险提示。
所以 Move 不需要 approve,不是因为它少了一步,而是因为它背后的执行模型和资产模型本来就不同。这种差异真正值得看的,不只是“更方便”,而是它后面可能带来的组合方式和安全模型变化。
原微博中的媒体
