
先明确对账的对象与适用范围
区块链对账系统的基本任务,是核对业务账与链上记录是否一致,并解释差异。核对前应明确网络、资产、地址范围与截止位置,否则金额相同也未必代表同一笔业务。本文以以太坊和比特币的基础机制为例,说明对账中的通用问题;不同网络的规则需要分别确认。
理解两种账本模型
以太坊开发者文档将交易解释为经过签名、用于更新网络状态的指令,涉及发送方、接收方、金额、账户交易序号及调用数据等信息。对账时,需要区分直接转移ETH与调用合约:合约地址可能是执行入口,不能仅凭交易接收地址判断业务收款方。
比特币开发者指南描述的是输入与输出的衔接关系:交易花费此前未使用的输出,并创建新的输出,一笔交易可以包含多个输出。因此,比特币对账需要落实到相关输出,不能默认一笔交易只对应一个收款对象。
建立可追溯的关联关系
业务订单号与链上交易标识属于不同体系。系统设计时需要保留两者的关联,并记录网络、相关地址、金额及区块定位信息。对于多个输出的交易,还需要明确业务对应哪个输出,避免把整笔交易的总额算作某一笔业务金额。
区块高度表示位置,但分叉时同一高度可能出现不同区块。核对记录宜同时保留区块哈希,以便确认当时依据的是哪一份链上记录。
把金额与费用分开核对
对账应分别定义发送金额、接收金额和手续费,不能要求发送方余额减少量始终等于接收方增加量。以太坊执行交易涉及gas费用;比特币普通交易的输入总额与输出总额之差构成手续费。费用归属不清,容易形成表面上的金额差异。
金额单位也必须统一。以太坊交易中的value以wei表示;核对时应保留精确数值,再按展示单位转换,避免把页面显示的小数直接当成底层记账值。
常见问题:有交易标识就能认定完成吗
不能。交易被广播、被纳入区块,以及达到相应确认或最终性条件,是不同阶段。对账系统需要区分这些状态,并根据所用网络定义业务完成条件;涉及合约时,还需要核对执行结果是否符合业务含义。
出现差异也不一定意味着资产缺失。可先检查数据是否同步到相同区块、金额是否包含费用、交易是否仍在等待处理,以及是否发生分叉导致记录变化。链上信息提供核对依据,订单归属和业务履约仍需结合业务记录判断。