[英]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 请求是异步的。
如果要发出异步请求,可以将可选回调作为最后一个参数传递给大多数函数。 所有回调都使用错误优先回调样式
要取消某些以太坊待处理交易,您需要:
使用 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.