
先确定要查的对象
实用的查询从具体问题开始:是定位一笔交易、确认它所在的区块,还是理解某个代币余额?这些问题涉及不同字段。记录所属网络、查询对象和计量单位,可以避免把不同含义的数据放在一起比较。
比特币开发指南介绍的是比特币账本及其验证机制;OpenZeppelin的ERC-20文档解释的是同质化代币合约及数值表示。两类知识分别适用,不能把一种网络的数据结构直接套用到所有区块链。
交易标识与区块高度有什么区别
在比特币中,交易标识TXID用于引用交易,交易输出还需结合输出位置区分。区块高度表示区块在链中的位置;发生分叉时,同一高度可能存在不同区块,因此精确定位区块应使用区块哈希。
查询时应区分“哪笔交易”“哪个输出”和“哪个区块”。仅有高度,不能在分叉情形下唯一确定区块;仅有交易标识,也没有指出其中的某一个输出。
确认与输入输出应该怎样理解
比特币通过前后区块的哈希关联和工作量证明保护历史记录。后续区块增加,会提高改写此前记录的成本,但不能据此把确认理解为绝对不可改变。
普通比特币交易使用此前尚未花费的输出作为输入,并创建新输出。输入总额与输出总额的差额是交易手续费。一个交易可以有多个输出,因此不能直接把全部输出金额当作某个接收方收到的金额。
为什么代币原始余额与显示余额不同
ERC-20合约用整数记录余额,decimals用于约定显示精度。显示金额等于原始整数除以10的decimals次方;这一换算改变的是显示方式,合约内部仍使用整数运算。
OpenZeppelin的ERC20实现默认精度为18,但允许覆盖。查询具体代币时,应结合对应合约的精度解释余额,不能把默认值视为所有代币的固定规则。代币名称也无法代替合约对象的确认。
查询结果能够说明什么
查询结果需要与问题对应:交易记录用于检查输入输出,区块信息用于理解收录位置,代币精度用于解释金额。余额显示正确,并不等于已经核对某笔交易;找到交易,也不等于已经确定目标输出。
入门时可围绕对象、位置、状态和单位逐项理解字段。先明确每个数值代表什么,再判断它是否回答了自己的问题,比单看一个余额或确认数字更可靠。