比如五十个账户的私钥,调用他们去批量转账还好没出现什么大问题。
批量去调用薄饼接口去交易,比如三十多个号,就有十多个号失败的,大概效果就截图这样。
警告! 合约执行时遇到错误 [execution reverted ]
循环的以下代码,单一调用转是正常的,就是批量的时候,账户少也正常,账户多了就会出现广播出去了,但是链上出现失败。大概三十多个号,出现十多个失败的。

let txData = contract.methods.swapExactETHForTokens(
amountOutMin,
[_this.tokens['addressB'], _this.tokens['addressA']],
account,
_this.getTime(600),
).encodeABI();
const rawTx = {
from: account,
to: contract.options.address,
nonce: nonce,
data: txData,
value: value
}
let gas = await web3js.eth.estimateGas(rawTx);
rawTx.gas = gas;
let signTx = await web3js.eth.accounts.signTransaction(rawTx, privateKey);
web3js.eth.sendSignedTransaction(signTx.rawTransaction, function(error, txHash) {}
根据你这个交易的截图看,交易是因为实际使用的gas
超过了给出的gasLimit限制导致的。
之所以会出现这种情况,是因为Ethereum再估算gas消耗时,是根据当时的合约状态来计算的,但是,合约的状态是一直在变化的,引起变化的可能有多种:
上面两种,都有可能因为前面发的交易而被改变,而预估时的状态,到交易打包时已经发生变化,导致上面两种可能影响gas消耗的情概况发生,如果影响是实际gas消耗上涨,则使用原来预估时的gasLimit会导致交易失败。而这种情况在批量发交易时更容易发生,因此发生楼主描述的情况。
一种解决办法,是可以在预估gas的基础上,上调20%的变化空间。
从图上面的显示,有个gas使用率是99.23%, 先要加gaslimit 50w/100w,先排除gas的问题。
然后你这个主要问题应该是滑点,先不管是不是通缩收费的问题, 一个交易对,如果只有你一个人购买,没有其他操作,价格是每买一笔,就涨一点点,如果你的所有账号都是一个代码一起发出去的,那么后面成交的,价格已经高了,所以你的输出就达不到了。
你可以把amountOutMin
写成0,你所有交易可能就通过了

滑点0.5
let expected = getAmountsOut();
let a = 10000 / ((0.5*100)+10000)
let b = a*expected;
b就是滑点结果
买的滑点一般是按照通缩比例就够,或者+1,卖的话不够,得一点点往上加试试。。可能得填2倍 那种检测的没了解怎么测的,可能本地买卖一笔,拿实际额计算来的
顺便问下滑点有没会计算的,买卖实际的滑点各多少,或者有没接口。我看很多地方检查合约代码安全的电报都有可以查出来滑点多少的。
以下方法算出来好像不太准,和实际薄饼上面操作出来的滑点发出去amountOutMin有偏差。不过也能发布出去。

let slippage = 20;
let amounts = await contract.methods.getAmountsOut(
value,
[_this.tokens['addressB'], _this.tokens['addressA']]
).call();
let amountOutMin = toDecimal(toTransNum(amounts[1] - (amounts[1] / slippage)), 0);