
适用范围:先明确授权的对象
区块链中的“授权”可能指不同权限。这里讨论以太坊账户与 ERC-20 代币授权,不将其直接推广到其他链、NFT 或所有智能合约。入门时需要回答三个问题:谁作出授权、谁获得权限、权限覆盖哪些资产。
账户、钱包与私钥的关系
以太坊账户文档区分外部账户与合约账户:前者的控制涉及私钥,后者按合约逻辑运行。钱包则是与账户交互的应用或界面。私钥用于签署交易、证明请求来自相应控制者,不能作为普通授权信息交给他人。

因此,钱包界面里的确认动作需要结合实际请求理解。账户控制权与某种代币的使用权限属于不同层次;授予代币额度,并不等于把账户私钥交出去。

ERC-20 授权如何表达权限
OpenZeppelin 的 ERC-20 接口说明中,approve 用于设置指定使用者的额度,allowance 用于查询剩余额度,transferFrom 用于按权限转移持有者的代币。转移还需要满足余额等条件。
可以把这套关系理解为一条权限记录:某个持有者允许某个使用者,在某个代币合约中使用一定数量的代币。授权本身设置的是额度;实际资产转移由后续调用完成。识别权限时,代币地址、使用者地址与额度需要一起看,单看应用名称不足以说明权限范围。
额度、余额与无限授权
额度表示允许使用多少,余额表示实际持有多少,两者不能混为一谈。有额度不代表一定能够完成转移,也不代表代币已经转出。
在所述 OpenZeppelin 实现中,最大整数额度被视为无限授权,代扣时不会递减。普通额度与无限额度的差别,涉及后续可使用权限的范围;具体代币是否采用相同行为,需要结合其实现确认。
常见问题与适用条件
授权是否都需要持有者直接发送链上交易?并非如此。支持 ERC-2612 的代币可使用签名授权扩展,但不能据此认定所有 ERC-20 都支持。签名同样可能表达权限,理解请求内容比仅看是否出现交易提示更重要。
修改额度是否只是替换一个数字?常规 approve 存在交易排序问题,旧额度与新额度可能先后被使用。理解权限变更时,需要考虑变更生效前的状态;降低额度也不能撤回已经完成的转移。