
适用范围与基本概念
区块链数字代币有哪些常见问题,可以从代币规则与应用如何处理代币两方面理解。本文聚焦以太坊ERC-20,不将其机制推广到所有链或所有代币类型。
以太坊开发者文档将ERC-20描述为同质化代币的通用接口,涵盖转移、余额与供应量查询、第三方支出授权。同一种代币的单位可以相互替代,这不表示不同代币价值相同,也不代表价格固定。
符合标准是否意味着功能完全相同
标准主要统一应用与代币合约沟通的方式。钱包能够查询余额,并不能据此判断代币是否允许增发、是否存在供应上限或能否暂停转移。
OpenZeppelin文档将基础ERC-20实现与供应上限、销毁、暂停等扩展区分开来。因此,某项扩展在工具库中存在,不等于每个使用该工具库的代币都已启用它。具体能力仍需对应具体实现。
为什么链上余额与页面数字不同
代币余额通常以整数记录,页面再依据小数位数换算显示。小数位数描述的是显示尺度,本身不增加余额或改变供应量。
理解余额时,应区分合约返回的原始数量与界面展示的数量。不同界面若采用不同的精度处理,显示可能不一致;单凭显示差异,无法认定发生了增发或扣减。
授权是否等于已经转出代币
授权用于设定第三方能够代为支出的额度,授权本身通常不完成代币转移。余额描述账户持有多少,授权额度描述指定第三方可以支出多少,两者是不同状态。
授权额度较大,也不能替代实际余额。理解授权结果,需要同时区分授权对象、额度与后续代为转移行为,不能将一次授权理解为仅对某个页面操作有效。
转账成功后为什么仍可能无法取回
ERC-20基础转移机制没有强制要求接收合约执行通知回调。因此,代币余额可以记在某个合约地址下,但该合约未必具备处理或转出这些代币的能力。
这解释了链上转移完成与应用入账之间的区别:前者反映代币账本变化,后者还依赖应用自己的处理逻辑。误转代币能否取回,取决于接收合约是否具备相应功能和权限,不能仅凭转账成功推断。