在Solana中如何判断指定历史交易是否修改了账户?
如何判断Solana历史交易是否修改了指定账户
先直接给结论:只靠writable: true加meta.err: null,没法确定账户真的被修改。具体原因和正确方法看下面:
writable: true只是交易里的权限声明,意思是这个账户允许被修改,但不代表交易执行时真的动了它。比如有些程序逻辑里,会先声明可写权限,但实际运行时因为条件不满足,根本没改账户数据或余额。- 要准确判断,得盯着交易返回的
meta字段里的实际变化:- 原生SOL账户:对比
preBalances和postBalances对应位置的数值,不一样就说明lamport变了; - 代币账户:找
preTokenBalances和postTokenBalances里对应账户的余额,数值有变化就是被修改了; - 如果节点开启了相关配置,
meta.accountDiff会直接给出账户数据的变更细节,这是最直接的证据;另外meta.logMessages里也可能有程序输出的修改日志,能辅助判断。
- 原生SOL账户:对比
- 补充:你说的
meta.err为null是交易成功的前提,这点没错——交易失败的话,不管什么权限,账户都不会有任何变化。
内容的提问来源于stack exchange,提问作者Zenas Chen
相关产品推荐
相关产品推荐

