
先明确对账范围
区块链对账项目的起点,是定义业务账与链上账如何对应:核对收付款明细、手续费,还是某个截止点的资产余额。不同目标需要不同字段和判断规则,仅比较两个总数,通常不足以解释差异。
以下讨论适用于以太坊、比特币相关的基础对账设计。其他链以及具体业务系统,需要根据各自协议和记账规则调整,不能直接套用。

理解两种账本模型
以太坊交易会触发账户相关状态变化,涉及发送方、接收方、金额、调用数据及费用等信息。比特币采用未花费交易输出,即UTXO模型:交易消耗先前输出,并产生新的输出,一笔交易可以包含多个输出。

由此,对账明细需要选择合适粒度。账户模型下应区分普通转账与合约交互;UTXO模型下则需要识别具体输出及其归属。交易标识可以关联记录,但不能预设一笔交易只对应一笔业务收款。
区分请求、执行与确认
以太坊交易从广播、等待打包到区块最终确定,经历不同阶段。比特币也可能出现竞争区块,同一高度可以对应不同区块,因此区块高度不能作为全局唯一标识。
对账规则应分别记录观察到交易、交易入块、执行结果及确认状态。取得交易哈希只能帮助定位交易,不能单独证明业务已经完成;入块后也应核验执行结果。为处理链上记录变化,可以同时保留区块哈希与高度,并明确重新核对的条件。
统一金额与费用口径
以太坊的value表示随交易转移的ETH数量,使用wei计量;当接收方是合约时,交易还可能执行合约逻辑。比特币普通交易的输入总额与输出总额之差构成手续费。
因此,业务金额、账户总支出与网络费用需要分开核对。以太坊交易中的费用上限也不等于实际支出,应按实际执行消耗及适用费率核算。金额处理需统一单位与精度,避免显示换算造成差异。
常见问题与验收重点
为什么接收地址一致仍无法确认收款对象?合约调用中的to可能是合约地址,具体操作还取决于调用数据与合约规则。为什么余额相等仍不能判定对账完成?遗漏与重复记录可能相互抵消,明细对应关系仍需检查。
项目验收可以围绕这些问题展开:同一记录重复读取是否重复入账,多个输出是否正确归属,费用是否独立记录,状态变化后是否能够复核。每项差异都应能追溯到原始链上记录和业务规则,才能形成可解释的对账结果。