ETH交易可以取消吗?

问题描述 投票:0回答:2

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

如果我使用

eth.sendTransaction({from:sender, to:receiver, value: amount})
进行 ETH 交易,这笔交易可以取消吗?

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

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

node.js ethereum web3js
2个回答
2
投票

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

对于您的其他问题,

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

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

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

使用回调

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


0
投票

要取消一些以太坊挂起的交易,您需要:

  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();
© www.soinside.com 2019 - 2024. All rights reserved.