以太坊:高并发时交易失败

时间:2018-04-12 10:02:45

标签: ethereum contract

我写了一份智能合约并将其部署在我的私人以太坊网络

这种合同方法已被多次调用,并且当我们的网站api受到攻击时,它运行得很好。

这是合同方法:

sendError

这种方法是一种批量转移方法。

function batchTransfer( uint64 _requestId, uint16 _count, address[] _receivers, uint256[] _amounts ) external payable onlyAdmin { require(_count == _receivers.length); require(_count == _amounts.length); uint sum = _sum(_amounts); require(sum <= msg.value); for(uint16 i = 0; i < _count; i++) { if(msg.sender != _receivers[i]) { _receivers[i].transfer(_amounts[i]); } } msg.sender.transfer(msg.value - sum); BatchTransfer(_requestId, msg.sender, sum, _count); } 最多100

_count为3,000,000

在高并发条件下,失败。

ethereum log&#39; out of gas&#39;。

按transactionHash查询:

gas limt

此事务成功写入块。

但是在低并发条件下,我再次调用了这个方法。

它会成功!

  

注意

  • 所有输入参数都一样!
  • 没有&#39;没气体&#39;
  • 不超过阻塞气体限制
  • 不超过队列
  • 某些块包含成功和失败事务

0 个答案:

没有答案