区块链 · 数字资产知识 · 行业资讯
文章库关于本站

信息核验

tp钱包的授权有哪些常见误区?读懂ERC-20授权额度

摘要

ERC-20授权通常是为特定代币、持有人和被授权地址设置可支用额度,并不等于立即转账。了解授权额度、无限授权、额度变更和直接转币的区别,有助于避免误解。

区块链液冷的科技主题配图

先明确范围:授权针对代币合约

本文讨论ERC-20代币合约的通用授权机制,不代指TP钱包某个特定页面,也不代表所有链上的操作都相同。ERC-20规范提供approve设置额度、allowance查询剩余额度、transferFrom按授权支用代币等接口。授权关系对应特定代币合约、持有人和被授权地址,也就是spender。

误区一:点击授权就等于转出代币

approve通常是设置spender可支用的额度,本身不代表代币已经转出。因此,确认授权后余额没有立即减少,并不必然说明操作失败。之后spender可以在授权额度和持有人余额允许的范围内,通过transferFrom转移代币。

区块链显卡矿机的科技主题配图

误区二:授权额度覆盖钱包里的所有资产

ERC-20的allowance是某个代币合约针对特定持有人和spender记录的额度,不是对钱包内所有代币的通用许可。核对授权时,应留意对应的代币、链、spender地址和额度,不能只凭应用名称判断授权范围。

区块链硬盘挖矿的科技主题配图

误区三:最大额度只够当前这一次操作

有些授权会设置很大的额度。OpenZeppelin的ERC-20实现说明,最大uint256额度在语义上相当于无限授权,并且transferFrom使用时不会递减。不要把这种额度误认为只够完成一次操作,或认为用过一次就会自动失效;具体代币实现和钱包展示可能存在差异。

误区四:直接修改额度没有其他影响

直接把一个非零额度改成另一个非零额度,可能遇到交易先后顺序带来的风险:旧额度与新额度都有可能被支用。OpenZeppelin接口说明的一种缓解方式是先把额度降为0,再设置需要的额度。若要减少后续可支用范围,可在代币和钱包支持的情况下调低或清零对应额度;这不会撤销已经完成的转账。

常见问题:把代币直接转到合约地址可以代替授权吗?

不可以把两者当成同一操作。ERC-20标准没有要求接收合约必须提供代币接收通知或处理功能;若直接把代币转给无法处理ERC-20代币的合约,代币可能无法取回。合约存入代币时,常见做法是先授权,再由合约通过transferFrom支用,但仍应遵循具体合约的操作要求。

← 返回全部文章

延伸阅读 · 相关栏目

安全防护钱包与账户风险识别信息核验