以太坊最新漏洞首发!重大发现!以太坊Token转账有...

  • 时间:
  • 浏览:131

  以太坊的区块以前是不能直接从区块数据判断一笔转账交易是否真实成功的,为了判断一笔转账交易的有效性不得不去额外做很多判断;为了解决这个问题,以太坊网络在2017年10月份触发了1次软分叉(简称Byzantium fork),所有的区块记录的时候,增加一个status字段用于标识一笔交易在区块记录的时候是否为真实的成功;相关记录可参见这一篇帖子:https://ethereum.stackexchange.com/questions/28077/how-do-i-detect-a-failed-transaction-after-the-byzantium-fork-as-the-revert-opco

  从区块号4370000(Byzantium)开始,新增加一个status字段到receipts里面,用于指示一笔转账是否为真实的成功。通过以太坊的RPC接口eth_getTransactionReceipt(transactionHash)返回的结果中可以看到这个字段。

  

  图1 以太坊交易status字段标识失败

  现在我们从etherscan.io网站上查询交易hash,拿到的数据展示内容基本上和上图一致,可以看到TxReceipt Status字段就是取自接口eth_getTransactionReceipt中返回的status字段,直接被用于标识一笔转账交易的成功失败状态。

  自上一次软分叉以来,使用receipts里面的status判断一笔转账交易是否有效一直是正确的,然而进入2018年10月以来,会不经意发现,出现了一些status指示为成功,但是实际转账交易失败的情况,这可能和以太坊即将要做的分叉有关系。为此我们抓取了1笔这样的交易,会发现很颠覆人的认知,出现了status为成功,实际转账为失败的情况。

  bet36网站

  图2 Status标识成功实际为失败

  上图是我们抓取到的1个典型的例子,交易字段标识为成功了,但是实际转账失败了。这一次的字段调整还没有看到比较权威的说明。这个调整对于采用status字段判断交易成功,进而给充币入账的系统会带来严重的资金判断失误,特别是交易站尤其要引起注意!!!。截止到今天晚上8点,在以太坊网络上已经发现了大量的类似交易,在频繁的试探各大交易站的充币系统,一旦没有被发现并及时修复的交易站将可能因此蒙受巨大的损失。

  说了漏洞,自然还是要说一下修复方法,简单的修复方法,其实以太坊的Token转账,往往都会触发一个事件,既然是事件,就会有不一样的数据字段,让我们看下面这笔正确的Token转账截图:

  

  图3 一笔正确的Token转账

  正确的转账我们能看到会触发1个事件,Event Logs会有内容,同时会出现一个Tokens Transferred的解析内容。而错误的是不会有这2项标志。

  让我们通过以太坊的经典接口eth_getTransactionReceipt返回的字段分析来抛砖引玉。

  

  图4 bet36体育 错误的交易

  图4这是一笔错误的交易,从接口返回可以看到,即便是错误的交易,接口返回的status为1,标识成功,但是实际上logs的内容为空。说明这实际还是一笔失败的交易。

  

  图5 正确的交易

  图5这是一笔正确的交易,从接口返回能看到,status为1,同时logs里面记录了这一次token转账的事件细节,包括了关键的blockNumber字段,data里面携带了转账的token数量等关键信息。

  从这2个错误的地方能看到,交易站不能仅依赖于status字段的判断,还要对token转账的event log字段进行分析,才能正确的判断一笔token转账是否真实成功,避免黑客恶意构造错误的转账记录导致资金判断受损失。


bet36网站 bet36体育 bet36网站

猜你喜欢