
一、ERC-20适合哪些代币
ERC-20面向同质化代币,即同一合约中的同等数量单位具有相同类型、可相互替代。它统一了余额查询、总供应量、转账和授权等接口,方便应用集成。这里的同质化不表示不同项目的代币价值相同,也不构成价格保证。
本文讨论以太坊ERC-20及相应实现,不将这些规则直接推广到所有区块链。若需求强调每个资产独一无二,便不能仅凭ERC-20接口表达这种差异。
二、为什么显示数量与链上整数不同
OpenZeppelin的ERC20实现默认使用18位小数精度。decimals用于解释显示单位,余额和转账金额仍以整数记录;改变显示精度不会自动重写已有余额。初始供应量也必须按最小单位理解。
常见错误是把界面显示数量直接当作合约参数,或者在不同页面采用不同换算方式。开发时应明确区分显示单位与最小单位,让余额、供应量和金额输入使用一致规则。
三、继承标准实现是否就完成了发行设计
标准实现提供基础记账能力,但不会替项目决定发行规则。OpenZeppelin的示例通过构造函数铸造初始供应,并将其分配给部署者;这只是示例设计,并非所有ERC-20代币都必须如此。
因此,初始数量、接收地址以及是否存在后续增发能力,应分别核对。代币名称和符号属于标识信息,不能据此推断发行上限或管理权限。
四、授权与转账有什么区别
approve设置第三方可使用的额度,allowance查询额度,transferFrom用于在授权范围内转移代币。授权本身不等于代币已经转出,更不表示接收应用已完成业务记账。
集成时应区分额度、余额和业务状态:有授权不代表余额充足,代币转移完成也不必然代表某项应用操作完成。
五、为什么成功转账仍可能导致代币卡住
以太坊开发文档指出,ERC-20没有强制的接收通知机制。向不具备代币处理能力的合约转账,可能使代币无法取回;接收方存在普通回退函数,也不代表它会收到ERC-20转账回调。
防护需要考虑兼容性。限制向代币合约自身转账只能减少部分误操作,一概禁止向合约转账则可能破坏正常集成。判断接收是否安全,应关注目标合约的业务入口和代币转出能力,而不能仅看转账是否成功。