繁体   English   中英

Web3 - 可以取消 ETH 交易吗?

[英]Web3 - can ETH transaction be cancelled?

我正在尝试创建一个可以进行以太坊交易的网站。

如果我使用eth.sendTransaction({from:sender, to:receiver, value: amount})进行 eth 交易,可以取消此交易吗?

我问这个是因为我看到它不接受任何承诺或回调参数,这意味着我不知道交易是否成功?

web3 交易可以取消吗? 如果是,我如何确保我收到通知是否已进行交易? (最好使用承诺或回调,而不是每次都检查钱包)

取消交易在技术上是可行的,但可能性很小。 本质上,这样做的唯一方法是尝试使用相同的帐户/随机数组合发送另一笔交易,并希望在您要取消的交易被挖掘之前被挖掘。 这只是如何使用 nonce 来保证交易顺序而不是取消功能的副作用。

对于您的其他问题, web3.eth.sendTransaction确实需要回调。 它是选项对象之后的可选第二个参数,并使用错误/结果回调样式。 Web3js API

web3.eth.sendTransaction(transactionObject [, callback])

功能 - (可选)如果您传递回调,则 HTTP 请求是异步的。

使用回调

如果要发出异步请求,可以将可选回调作为最后一个参数传递给大多数函数。 所有回调都使用错误优先回调样式

要取消某些以太坊待处理交易,您需要:

  1. 创建一个新交易,您将在其中向自己发送 0 ETH。
  2. 你应该增加汽油费的价值
  3. 您需要使用与待处理事务相同的随机数。

使用 web3js,您可以执行以下操作:

async function main() {
   require('dotenv').config();
   const { API_URL, PRIVATE_KEY } = process.env;
   const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
   const web3 = createAlchemyWeb3(API_URL);
   const myAddress = //put your address
   const nonce = //put the nonce of pending tx
   const maxFeePerGas = //increase the gas fee value comparated to the pending tx 

   const transaction = {
      'to': myAddress,
      'value': 0,
      'gas': 21000,
      'maxFeePerGas': maxFeePerGas,
      'nonce': nonce
   };

   const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);

   web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {
      if (!error) {
         console.log("The hash of your transaction is: ", hash);
      } else {
         console.log(error)
      }
    });
}

main();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM