
先明确查询对象与适用范围
查询入门首先要分清:要了解一笔交易的构成,还是一个地址的代币余额,或余额数字对应的显示数量。这些问题涉及不同字段,不能只凭一个数字判断结果。
下文依据Bitcoin Developer Guides的交易说明与OpenZeppelin的ERC-20说明,分别解释比特币交易模型和ERC-20余额模型。两者适用范围不同,不能直接推广到所有区块链资产。

比特币:理解余额背后的输出
比特币普通交易的输入引用此前交易的输出,新输出在被后续交易花费前称为未花费交易输出,即UTXO。钱包余额对应其可控制的相关UTXO金额总和。定位某个输出需要交易标识txid和输出序号,序号从零开始。矿工创建的coinbase交易属于特殊情况。

这意味着,一笔交易和其中某个输出是不同层级的查询对象。只知道txid,可以识别交易;如果要追踪具体输出是否被花费,还需要辨认其序号。历史上出现过的输出,也不能一律计入当前余额。
ERC-20:区分原始余额与显示数量
OpenZeppelin的ERC-20说明介绍了同质化代币:同一种代币的单位具有可互换性。合约通过balanceOf查询地址余额,内部以整数记账;显示数量需要用原始整数除以10的decimals次方。其ERC20实现默认小数位为18,但允许修改。
因此,解读余额时需要把合约、查询地址和小数位联系起来。同一个地址的余额查询必须针对相应代币合约;单独看到一长串整数,还不足以确定通常界面上应显示多少代币。
常见问题:数字为什么看起来不同
原始余额很大,是否意味着代币数量也很大?不一定。原始整数可能包含用于表示小数的单位缩放,需要完成换算后再理解数量。默认小数位也不能代替对具体合约设置的核对。
比特币查询也能套用balanceOf吗?上述比特币说明采用UTXO模型,ERC-20说明采用合约余额模型。两者都能表达持有数量,但查询所依据的数据结构不同。
查询结果能够说明什么
交易标识用于识别交易,输出序号用于定位输出,合约余额与小数位共同解释代币数量。理解字段时,应先确认它描述的对象,再解释数值含义。
这些技术信息说明的是链上记录及其计量方式。余额数量本身不等于价格或价值,也不能由采用ERC-20接口这一点,推断某个具体项目的其他属性。