[{"data":1,"prerenderedAt":19},["ShallowReactive",2],{"blog-content-zh-token-approvals-and-permit-explained":3},{"slug":4,"title":5,"excerpt":6,"description":7,"bodyHtml":8,"faqItems":9},"token-approvals-and-permit-explained","代币授权、Allowance 与 Permit：你签的到底是什么","每当 dApp 请求你「授权」一个代币，你就是在授予某个合约花费你余额的权利。本文讲解 ERC-20 allowance 的真实运作方式、Permit 和 Permit2 改变了什么，以及如何防止旧授权变成隐患。","ERC-20 授权详解：approve 与 allowance 的工作原理、无限授权的风险、EIP-2612 Permit 与 Permit2 签名、钱包吸干（drainer）骗局，以及如何安全地检查与撤销代币授权。","\u003Ch2>dApp 为什么要请求授权\u003C\u002Fh2>\n\u003Cp>ERC-20 代币有一个塑造了 Web3 一半用户体验的特性：智能合约不能直接从你的地址取走代币——即使你希望它这么做。要兑换你 USDC 的 DEX 必须先获得你的明确许可。这就是为什么如此多的交互分两步——先是一笔 \u003Cem>approve\u003C\u002Fem> 交易，然后才是真正的兑换或存入。授权不是走过场，它是一份持续有效的花费授权书，其效力比你当初给它的那笔交易长久得多。\u003C\u002Fp>\n\n\u003Ch2>approve() 到底授予了什么\u003C\u002Fh2>\n\u003Cp>当你签署一笔授权时，代币合约会记录一条 \u003Cem>allowance\u003C\u002Fem>：地址 X（dApp 的合约）可以随时花费你至多 N 个代币，直到额度用尽或被更改。有两个属性很关键。第一，allowance 归属于\u003Cem>你所授权的合约\u003C\u002Fem>，而非你访问的网站——界面可以消失，权限依然存在。第二，花费时完全不需要你的参与：一旦授予，被授权的合约可以在此后任何交易中划走代币，无需你再签名。这正是授权有用的原因——也正是它成为攻击面的原因。\u003C\u002Fp>\n\n\u003Ch2>无限授权：方便，也是长期风险\u003C\u002Fh2>\n\u003Cp>由于每次授权都要消耗 gas，许多 dApp 会请求一个实际上\u003Cem>无上限\u003C\u002Fem>的 allowance，让你再也不用重复授权。方便是真的，代价也是真的：给某个合约无限授权，意味着你在该代币上的全部余额将永远押在那个合约的安全性上。如果该合约多年后被攻破——或者从一开始就是恶意的——攻击者不需要你的私钥或签名；你当年授予的 allowance 就足够了。许多最大的钱包被吸干事件根本不是私钥被盗，而是旧授权被兑现。\u003C\u002Fp>\n\n\u003Ch2>Permit 与 Permit2：用签名完成授权\u003C\u002Fh2>\n\u003Cp>现代的改进是 \u003Cstrong>Permit\u003C\u002Fstrong>（EIP-2612）：不再发送链上 approve 交易，而是签署一条链下消息，由 dApp 连同其操作一起提交——两笔交易变一笔，没有单独的授权 gas，而且权限可以设置截止时间。\u003Cstrong>Permit2\u003C\u002Fstrong> 将这一思路推广到从未实现 EIP-2612 的代币，充当共享授权枢纽，提供会过期、有额度限制的授权。这些是真正的进步，但注意它们改变了什么：签名如今承担了过去由交易承担的工作。让你签错 Permit 消息的钓鱼网站，效果等同于一笔恶意授权——所以\u003Cem>读懂你所签的内容\u003C\u002Fem>比以往更重要，而不是更不重要。\u003C\u002Fp>\n\n\u003Ch2>攻击面：吸干者与陈旧的 allowance\u003C\u002Fh2>\n\u003Cp>授权滥用有两种形态。主动型：drainer 网站冒充真实 dApp，把授权（或 Permit 签名）伪装成「领取」「验证钱包」之类无害操作来索取。被动型：你多年前授予正规合约的 allowance 一直休眠，直到该合约、其管理员密钥或升级路径被攻破。这两者都说明应把「连接并授权」流程当作 Web3 安全的关键时刻——安全做法见\u003Ca href=\"\u002Fblog\u002Fhow-to-connect-wallet-to-dapp\">如何安全地将钱包连接到 dApp\u003C\u002Fa>。\u003C\u002Fp>\n\n\u003Ch2>真正有效的授权卫生习惯\u003C\u002Fh2>\n\u003Cp>三个习惯可以覆盖大部分风险。在 dApp 允许时授权\u003Cem>限定额度\u003C\u002Fem>，尤其是大额余额——之后多授权一次是廉价的保险。用信誉良好的授权检查工具\u003Cem>定期检查并撤销\u003C\u002Fem> allowance，把不再使用的一律当作应清除的累赘（撤销本身也是一笔交易）。把重要资产放在一个从不签署授权的地址上，与你活跃的 dApp 钱包分开。更多分层习惯见\u003Ca href=\"\u002Fblog\u002Fcrypto-wallet-security-best-practices\">钱包安全最佳实践\u003C\u002Fa>。\u003C\u002Fp>\n\n\u003Ch2>WATS 在其中的位置\u003C\u002Fh2>\n\u003Cp>授权就是签名，而签名是钱包的领地。\u003Ca href=\"\u002Fhot-wallet\">WATS\u003C\u002Fa> 完全非托管——钥匙由你持有，WATS 从不持有任何钥匙——因此每一次授权、Permit 签名和撤销，都只在\u003Cem>你的\u003C\u002Fem>私钥签名时发生，通过浏览器扩展或移动应用，覆盖 EVM、Solana 和 TON。费用侧是 WATS 与众不同之处：每个操作，包括授权和撤销交易，都用同一种代币 \u003Cstrong>ATS\u003C\u002Fstrong> 计费，而不是链的原生 gas——在 EVM 上通过 \u003Cstrong>ERC-4337 paymaster\u003C\u002Fstrong>，在 Solana 和 TON 上通过等效的代付者\u002F中继者——因此清理旧 allowance 永远不会因为你在那条网络上没有 gas 代币而卡住。收取的 ATS 会被销毁，供应量从 1 亿向 3000 万下限递减；而由于 ATS 是 LayerZero OFT，一个余额即可覆盖所有链。WATS 是第一个也是唯一一个将 ERC-4337 与 OFT 单代币手续费与这一销毁机制相结合的钱包——详见 \u003Ca href=\"\u002Fats-fee\">ATS 费用页面\u003C\u002Fa>。\u003C\u002Fp>",[10,13,16],{"q":11,"a":12},"什么是代币 allowance？","Allowance 是记录在 ERC-20 代币合约里的一项持续有效的许可：它规定某个特定合约可以花费你至多某个数量的代币。它在你签署 approve 交易时产生，并且——与你当时使用的网站无关——一直存在，直到被用尽、更改或撤销。花费时，被授权的合约不需要你的任何额外签名。",{"q":14,"a":15},"无限授权安全吗？","它们很方便，但带着永久的尾部风险：你在该代币上的全部余额，取决于被授权合约永远不被攻破、永远不作恶——无限期地。对小额活跃余额，方便通常占上风；对大额持仓，优先选择限定额度，并定期撤销不再使用的 allowance。许多重大吸干事件是旧授权被利用，而非私钥被盗。",{"q":17,"a":18},"Permit 和普通授权有什么区别？","普通授权是一笔独立的链上交易，在 dApp 行动之前要先花 gas。Permit（EIP-2612）用一条链下签名取代它，由 dApp 打包进自己的交易——一步完成，还可设置截止时间；Permit2 把这一模式扩展到不原生支持 Permit 的代币。安全模型随之转移：签名现在可以授予花费权，所以对签名请求要像审查授权一样严格审查。",1784634303246]