跳到正文

ERC-20

ERC-20 是以太坊同质化代币的标准接口。了解余额、转账、额度和授权如何运作,以及这一标准不保证哪些事项。

更新于

仅供教育用途,不构成投资建议。投资可能导致损失。

直接答案

ERC-20 是以太坊上同质化代币合约的标准接口。钱包、交易所和去中心化应用可以使用相同的调用来读取供应量或余额、转移代币,以及授权另一个地址在限定额度内支出。同质化是指同一代币的等量单位可相互替代。

核心接口包括:

  • 用于读取供应量和账户余额的 totalSupplybalanceOf
  • 用于转出调用者代币的 transfer
  • 用于设置和读取支出方额度的 approveallowance
  • 用于在额度内从所有者余额中支出的 transferFrom;以及
  • 用于记录转账和授权的 TransferApproval 事件。

这一标准定义的是互操作性,而不是资产质量。符合 ERC-20 并不保证供应量固定、市场价值公允、能够赎回、具有流动性、管理安全,甚至不保证各种实现的行为完全一致。

运作方式

ERC-20 余额是代币合约状态中与某个地址关联的一条记录。钱包只是显示该状态,并不持有单独的代币文件。当 transfer(to, amount) 成功时,合约会减少调用者的余额、增加接收方的余额,并发出 Transfer 事件。用户通常以 ETH 支付网络 Gas。如果执行回滚,代币状态变更会被撤销,但已经消耗的 Gas 不会全额退还。

委托支出使用额度。调用 approve(spender, amount) 会设定该支出方可以从调用者余额中使用的金额。随后,支出方可以调用 transferFrom(owner, to, amount),而 allowance(owner, spender) 会显示剩余额度。一项授权只属于一个网络上一份代币合约中的一组所有者与支出方,并非对钱包内全部资产的许可。

再次调用 approve 会覆盖原有额度。EIP-20 规范提醒用户界面,在把现有额度改为另一个非零值之前,先将其设为 0;否则,交易排序可能使支出方同时使用新旧两个额度。把额度设为 0 可以阻止该所有者、支出方与代币组合未来的 transferFrom 调用,但不能追回已经转出的代币。

在 EIP-20 中,namesymboldecimals 是可选的元数据方法。decimals 影响显示单位,不影响合约中的整数记账。该标准也不规定代币如何铸造或销毁、转账能否暂停或征税、地址能否被冻结,或代理逻辑能否升级。这些行为必须通过已部署代码、当前实现和管理权限来核查。

示例

假设一个钱包持有 1,000 单位的 ERC-20 代币,用户想通过去中心化交易所路由器兑换其中 100 单位。用户先提交 approve(router, 100)。如果成功,路由器就可以调用 transferFrom(user, pool, 100);全部支出后,通常的剩余额度为 0。授权交易和兑换交易是两项独立的链上操作,因此可能各自需要 Gas,也可能分别失败。

批准可设置的最大值可以避免反复授权,但如果路由器、其升级权限或用于获取授权的界面遭到入侵,就会有更大金额在更长时间内处于风险中。限定额度可以缩小这种风险敞口,但无法消除智能合约、代币价格、流动性或交易风险。

风险

  • 合约或网络错误: 名称、符号和图标都可以仿冒;请核实目标网络上的合约地址。
  • 额度过高: 恶意或遭到入侵的支出方可能使用尚未用完的额度,直至批准上限。
  • 非标准行为: 一些广泛使用的代币不会完全按预期返回值,另一些则会收取转账费、对余额进行重基准、屏蔽地址或暂停转账。
  • 管理控制: 铸造、冻结、升级或其他特权操作可能在用户取得代币后改变其风险。
  • 转账无法追回: 将代币发送到错误地址或无法处理代币的合约,可能导致资产无法找回。

ERC-20 标准化降低了集成阻力,但不会消除合约、发行方、托管、市场或操作风险。签名前,请检查网络、代币合约、支出方地址、授权金额和交易调用。

常见误区

误区 1:标注 ERC-20 就能证明代币合法可靠

任何人都可以用熟悉的名称或符号部署合约。这个标签只表明其接口声称符合标准。应先核实合约地址,再分别评估代码、权限、发行方、流动性和市场。

误区 2:授权会立即转出获批额度内的代币

approve 通常只会更改额度,本身并不会把代币转给支出方。之后的 transferFrom 调用才会移动代币。不过,尚未使用的额度是一项真实权限,在被用完、替换或设为 0 之前可能一直有效。

误区 3:所有 ERC-20 代币的行为都相同

该标准只规定最低限度的通用接口。它不要求采用某种供应政策,也不禁止费用、暂停、黑名单、重基准或可升级性。集成方必须根据实际实现处理,而不能只依赖 ERC-20 标签。

相关主题

来源

导航

搜索知识库...