
先明确要查哪一种记录
“资料更新记录”可能指一笔交易的确认状态,也可能指合约管理员或角色权限的变化。这两类信息需要分别查询:前者围绕交易标识和所属区块,后者围绕合约及其权限事件。交易查询接口不等于完整的资料版本日志。
查询前应明确所属网络、交易标识或合约地址,以及需要核对的变化。比特币交易接口与智能合约权限机制适用范围不同,不能直接混用。

比特币交易能查到什么
Bitcoin 开发者参考文档介绍,getrawtransaction 可返回原始交易数据,开启详细返回后可查看输入、输出及可用的区块信息。默认主要查询内存池交易;查询已入块交易,需要启用交易索引,或指定包含该交易且节点可用的区块。钱包交易可使用 gettransaction。

核对时应分别记录交易标识、区块哈希和确认数。详细结果中的 blocktime 是区块时间,time 与其相同,不能将它们理解成资料最后编辑时间。
合约权限变更如何追踪
OpenZeppelin 权限控制文档说明,Ownable 管理所有者权限,AccessControl 管理不同角色。基础 AccessControl 不支持在链上枚举角色成员,可在链下处理 RoleGranted 和 RoleRevoked 事件追踪变化;需要链上枚举时,可采用 AccessControlEnumerable 扩展。
这类查询适用于采用相应机制的合约。追踪时应围绕同一合约,按事件顺序核对角色和涉及账户,区分授予与撤销。当前拥有某项权限的账户名单,与权限历次变动记录是两种不同结果。
常见问题与核对边界
查不到交易是否代表交易不存在?不能仅凭一次查询失败作出判断。节点是否保有指定区块、是否启用交易索引,以及交易是否位于内存池,都会影响上述比特币接口的查询范围。
权限事件能否证明所有资料都更新了?不能。角色授予或撤销记录只能支持相应权限变化的判断,不能直接证明其他业务资料发生改变。事件追踪是否完整,也取决于覆盖的区块范围。
整理记录时,可将查询对象、所属网络、区块标识、观察到的状态和查询时间分别保存。查询时间表示核对发生的时点,区块时间表示链上区块的时间信息,两者应分开标注,便于后续复核。