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

数字资产知识

代币授权为什么不等于已经转账

摘要

余额、授权额度和实际转移记录是三类信息。用一个纸面例子理解代币合约中的授权关系与观察方法。

透明区块与分布式网络的原创概念插画

把三个数字分开记录

理解 ERC-20 授权,先区分持有余额、允许指定地址代为使用的额度,以及已经转出的数量。余额描述当前持有情况;授权额度描述特定使用者可以动用多少;实际转移则需要查看相应执行结果。三者可能同时出现在一个页面。

假设教学账本中甲有十枚代币,允许乙代为使用三枚。这个设定描述的是权限关系,不能直接写成甲已经向乙转了三枚。用不同颜色分别标余额和额度,初学者就能直观看到,增加一条允许关系不等于完成对应数量的移动。

授权需要明确对象和范围

标准中的授权接口以使用者地址和额度为参数,额度查询也需要给出持有人与使用者两个地址。授权不是一个没有对象的总开关。查询时遗漏任意一方,或者查错代币合约,都可能得到与所讨论操作无关的结果。

做资料整理时,可以用一句完整的话复述:在哪个网络的哪个合约中,哪个持有人允许哪个使用者使用多少。金额单位也要注明。这种复述能揭示截图省略的信息,比仅抄下已授权三个字更接近原始接口的含义。

用状态与事件核对动作

ERC-20 区分授权事件与转移事件,并提供代为转移的调用方式。阅读一次交互时,应先识别调用动作,再检查成功执行后记录了什么。看到授权相关记录,可以据此讨论授权变化,不能把它自动解释为后续操作也已完成。

继续前面的例子,若想知道乙后来是否实际使用了额度,需要查后续记录,而不是只看甲先前的确认页面。保留合约地址、双方地址、查询区块和相关交易标识,可以让授权关系与使用过程各自有据可查。本文例子只用于理解数据结构。

← 返回全部文章

延伸阅读 · 相关栏目

区块链基础技术原理数字资产知识资料与核验