javascript - tx.wait 与 Ethers.js 永远不会解决

标签 javascript blockchain web3js ethers.js

我正在尝试使用 ethers.js 将交易发送到多边形网络。提交交易后,我 await tx.wait(),但它有 50% 的时间无法解决。我看到其他人也有类似的问题,但这是由于他们的汽油价格太低。我目前有这段代码:

const getWallet = (): Wallet => {
  return new ethers.Wallet(PRIVATE_KEY, HTTP_PROVIDER);
};
const wallet = getWallet();
const gasPrice = 50000000000;
const swap1 = await wallet.sendTransaction({
      data: tx1.data,
      chainId: tx1.chainId,
      from: tx1.from,
      gasLimit: 350449, 
      gasPrice: gasPrice, 
      value: '0x' + new BigNumber(tx1.value).toString(16),
      to: tx1.to,
      nonce: nonce,
    });

我总是返回一个具有 tx 散列的对象,但是当我在 polyscan 上查找该散列时,它从未出现过。有时等待一个小时后,tx.wait() 仍然没有解决,交易仍然没有出现在 polyscan 中。

我取消我的脚本,将 gasPrice 提高 20% 并尝试使用相同的 nonce 再次运行它(希望替换它)。那时我通常会被告知更换汽油费太低。

谁能解释一下我做错了什么?

最佳答案

也许您首先需要使用新的 ethers.providers 实例化提供者,在本例中我使用 JsonRpcProvider。

除了 wait(),您还可以使用 ethers.provider.waitForTransaction(hash,confirmations,timeout) 执行另一个函数来等待接收。

你可以这样做:

const ethers = require("ethers");
const provider = new ethers.providers.JsonRpcProvider(HTTP_PROVIDER);
const wallet = new ethers.Wallet(PRIVATE_KEY, provider);
const swap1 = await wallet.sendTransaction({//});
const receipt = provider.waitForTransaction(swap1.hash, 1, 150000).then(() => {//});

关于javascript - tx.wait 与 Ethers.js 永远不会解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69947747/

相关文章:

javascript - 如何向客户端设置 CORS header

blockchain - 有没有什么办法可以让区 block 链上的某个特定信息只能被一个特定账户查询?

ethereum - Uncaught Error : Invalid Address web3. currentProvider MetaMask

web3js - 您如何估计智能合约调用所需的气体量?

blockchain - 自定义区 block 链数据结构

node.js - ETH 交易可以取消吗?

javascript - 如何将 SVG 导入 Next.js 组件?

javascript - Cycle.js - 如何获取集合项中的集合长度

javascript - 将变量传递给 JavaScript 中的 Replacestr 方法

blockchain - 尝试更新最新区 block 时遇到错误