重复交易挂起 - web3js,本地geth

时间:2018-03-26 16:05:02

标签: javascript ethereum web3js web3 geth

我的本​​地以太坊网络上的交易存在问题 - 在某些时候,交易挂起&我的帐户花了很多ETH。

以下是示例代码:

async function send(toAccount, weiVal) {
  let account = await w3.getDefAccount();

  for (let i = 0; i < 100; i++) {
    let res = await web3.eth.sendTransaction({
      from: account,
      to: toAccount,
      value: weiVal
    });
    await helper.timeout(2000);
  }
}

send('0x5648...', 100000000000000);

它在某个随机迭代中挂起sendTransaction调用(承诺永远不会解决)。

脚本重启后情况仍然相同 - 事务传递几次然后挂起。

geth版本:1.7.3

1 个答案:

答案 0 :(得分:3)

如果您要从同一帐户背靠背发送交易,则需要手动设置现时,因为该节点无法正确跟踪它。

示例代码

async function send(toAccount, weiVal) {
  const account = await web3.getDefAccount();
  // the transaction count does not include *pending* transactions
  // but is a good starting point for the nonce
  const nonce = await web3.eth.getTransactionCount(account);

  let promises =  [];
  for (let i = 0; i < 100; i++) {
    promises.push(web3.eth.sendTransaction({
      from: account,
      to: toAccount,
      nonce: nonce++, // increment the nonce for every transaction
      value: weiVal
    }));
  }

  return Promise.all(promises);
}

await send('0x5648...', 100000000000000);