在RPC配置正确,代码无误的时间,已经可以获得预估GAS,但是就是一直交易失败

我们知道,在使用estimateGas进行gas预估的时间,如果得到预估结果,其实意味着这笔交易逻辑基本是没有问题的:但是在bsc测试网开发的时间,就遇到了一次意外。在拿到预估gas之后,前端一直上链交易失败。查了区块链浏览器,发现根本没有上链。看了代码逻辑,也没有问题。使用remix

我们知道,在使用estimateGas进行gas预估的时间,如果得到预估结果,其实意味着这笔交易逻辑基本是没有问题的:

图片.png

但是在bsc测试网开发的时间,就遇到了一次意外。 在拿到预估gas之后,前端一直上链交易失败

  • 查了区块链浏览器,发现根本没有上链。
  • 看了代码逻辑,也没有问题。
  • 使用remix进行合约交互,发现没有问题。
  • 最后考虑到可能是gas费用不够的问题,查看了MetaMask的交易详情,发现是gas price 的问题: 在代码中没有主动设置gasPrice的情况,MetaMask会主动去请求链上的gasPrice或者是使用配置的gasPrice。 但是发现设置的GasPrice只有2.5,远远达不到正常交易的10 gwei,所以才交易失败。

图片.png

手动修改

手动将MetaMask的GasPrice调整为区块链正常交易的gas即可,我使用的是BSC测试网,所以这里设置为10 Gwei。

代码获取

我们也可以在代码发送交易的时间,主动设置GasPrice来解决问题。

// 构建交易对象
const txObject = {
    from: web3.eth.accounts.privateKeyToAccount(privateKey).address,
    to: toAddress,
    value: amountToSend
};

// 获取 gasPrice
web3.eth.getGasPrice().then((gasPrice) => {
    txObject.gasPrice = gasPrice;

    // 估算 gasLimit
    web3.eth.estimateGas(txObject).then((gasLimit) => {
        txObject.gas = gasLimit;

        // 签名交易并发送
        web3.eth.accounts.signTransaction(txObject, privateKey).then((signedTx) => {
            web3.eth.sendSignedTransaction(signedTx.rawTransaction)
                .on('receipt', (receipt) => {
                    console.log('Transaction Hash:', receipt.transactionHash);
                });
        });
    });
});
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
5 订阅 2 篇文章

0 条评论

请先 登录 后评论
智能合约&nft-开发者
智能合约&nft-开发者
0xF73d...90e8
telegram: @topnft2022