简介:接入EOS支付,发起交易很简单,接收交易也很简单,但交易验证,却是最常被低估以及忽略的部分。记得之前交易所遭到EOS假币攻击吗?就是交易验证的锅。然而就是这样一个和资金安全息息相关的部分,几乎找不到一篇专门讲的文章,遂作此文。
接入EOS支付,发起交易很简单,接收交易也很简单,但交易验证,却是最常被低估以及忽略的部分。记得之前交易所遭到EOS假币攻击吗?就是交易验证的锅。然而就是这样一个和资金安全息息相关的部分,几乎找不到一篇专门讲的文章,官方文档也无处可寻,遂作此文。
EOS交易验证,不是看某一个参数就可以的,需要验证这四个部分:
1.交易excuted;
2.不可逆,即交易所在区块号低于当前最新不可逆块号;
3.合约账户和货币符号,假币攻击就是因为交易所没验证合约账户;
4.From和to,即转入转出的账户需要再次确认。
Transaction同时满足这四个条件,才能判断为交易成功,并执行下一步程序。而且,如果是通过公共API或API服务商提供的数据进行交易验证,需要使用不同服务提供商的API至少进行二次确认,以防止API信息出错导致问题。
验证的技术实现:
1.交易excuted:验证transaction status参数为"executed";
2.不可逆:获得transaction所在区块的区块号以及主网最新不可逆块的区块号(不可逆区块高度),判断block_num<last_irreversible_block_num;
主网最新不可逆块的区块号可以通过RPC get_info等接口获得,也有一些获取transaction信息的接口返回时直接包含不可逆区块高度,比如EOSPark HTTPS API的get_account_related_trx_info.
官方RPC接口 get_info Node.js代码示例:
EOS RPC 接口获取主网基本信息返回数据示例:
EOS RPC 接口获取主网基本信息返回数据示例RPC get_info详情可以看之前写的这篇:https://www.jianshu.com/p/d2e7d4ad0c29
EOSPark HTTPS API的get_account_related_trx_info详情可以看之前这篇:https://www.jianshu.com/p/bb7dbe5d20e7
3.合约账户和货币符号:合约账户即action(act)中的account,货币符号可以从quantity中提取,也有些接口直接返回货币符号;
4.From和to:位于action(act)下data下。
Transaction结构示例,可以清楚看到status、block_num、action(act)中的account、action(act)下data下的quantity、from、to的位置:
EOS transaction结构示例我们有一个区块链知识星球,做区块链前沿资料的归纳整理以方便大家检索查询使用,也是国内顶尖区块链技术社区,欢迎感兴趣的朋友加入。如果你对上面内容有疑问,也可以加入知识星球提问我:
网友评论