Web3 - 可以取消 ETH 交易吗?

Posted

技术标签:

【中文标题】Web3 - 可以取消 ETH 交易吗?【英文标题】:Web3 - can ETH transaction be cancelled? 【发布时间】:2018-07-22 03:46:16 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

Using callbacks

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

【讨论】:

哦,是的..确实如此。对不起,我不知道为什么我没有看到。那么如果返回hash,那么肯定是挖出来记录在区块链上的吧?如果由于任何原因交易被“取消”,它总是会抛出错误?谢谢。 回调被多次调用。第一个回调将是交易哈希。一旦 tx 被挖出,它将再次被调用,并带有交易收据。如果 tx 因任何原因(包括 nonce 违规)失败,它将被调用并设置错误。 我想指出的是,您不应该期望取消交易。如果它被提交,预计它会被挖掘。我只是指出你可以强迫它失败,但我不建议将它作为你过程的一部分。如果您需要支持这样的功能,我会将其构建到合同本身中。 是的,我并不是要让它失败,但我希望它能够继续进行而不会失败,并在它发生时得到通知。但是感谢您为我的好奇心提供了足够的洞察力

以上是关于Web3 - 可以取消 ETH 交易吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 web3.js 从交易中获取 USDC(或任何非 ETH 值)

Web3.eth.abi.encodeFunctionCall 不工作

Web3 web3.eth.sendSignedTransaction 无效参数

买东西时用了淘宝店铺优惠券,取消订单后,优惠券会退回吗?

Web3 JS 如何从区块中获取交易

您可以通过 API 取消 PayPal 自动付款吗? (通过托管按钮创建的订阅)