
先明确查询对象与适用范围
理解合约查询,可以先从两个问题入手:正在读取哪个字段,返回值代表什么。ERC-20合约用于记录同质化代币,同一种代币的单位具有相同性质,适合用来认识余额、数量和显示单位之间的关系。
本文围绕ERC-20与JSON基础展开,分别对应OpenZeppelin的ERC-20说明和MDN的JSON说明。其他类型合约可能采用不同字段与规则,不能直接套用这里的解释。

认识余额与展示字段
在ERC-20中,balanceOf用于读取指定地址的代币余额;name、symbol和decimals分别涉及名称、符号和显示小数位。OpenZeppelin的实现提供这些扩展信息,但面对其他实现时,需要确认字段是否可用。

读懂查询结果,需要同时关注字段含义与输入对象。例如,某个地址的余额回答的是该地址持有多少代币,不能据此判断其他地址的余额,也不能将它当作整个合约的代币总供应量。
原始整数为什么不等于显示数量
代币数量的内部运算使用整数,decimals用于解释显示精度。将原始数量除以10的decimals次方,才能得到按代币单位显示的数量。OpenZeppelin ERC20默认采用18位小数,但实现可以修改这个值。
遇到很长的余额数字时,应先明确它是原始整数还是已经换算的显示值。对原始值遗漏换算,或对显示值重复换算,都会造成理解偏差。小数位描述的是数量的表达方式,不能据此推断代币价值。
JSON解决的是数据表达问题
如果查询接口以JSON返回信息,就需要识别对象、数组、字符串、数值、布尔值和null。JSON要求属性名使用双引号,不允许注释和尾随逗号。MDN介绍的JSON.parse用于解析JSON文本,JSON.stringify用于将值序列化为JSON字符串。
解析成功只表示文本符合相应语法。余额字段采用什么单位、字符串表达什么内容,仍需结合接口定义和合约字段理解;JSON格式本身不会赋予数据这些业务含义。
常见疑问如何判断
余额显示不同,是否就是数据错误?可以先检查两处结果是否使用相同单位,以及其中一处是否做过小数位换算。仅凭展示数字不同,还不足以确定原因。
所有合约都能查询这些字段吗?这些解释以ERC-20为范围,不能覆盖所有智能合约。入门时把字段定义、原始返回值和界面展示分开理解,有助于准确描述结果,也能避免把某种实现的默认设置当作通用规则。