前言
最近在主网测试一些交易的时候,想用更低的gas去打包交易,但是会发现如果你gas过于低,会导致你的交易迟迟不能上链,并且一直处于pending的状态。这种状态会导致你下一笔交易无法实现。

有的pending可以长达一天甚至2天。所以要么就去加速,要么就去取消
目标
实现
取消链上交易
取消操作比较简单,就是找到原有的交易,然后将其转账金额设置为0,然后转账的数据设置为“0x”即可
先根据你的交易hash,从etherscan获得整个交易信息

获得 from 和 to

获得noce,因为需要你是需要去覆盖他的noce,所以下面的noce是需要填一样的数据的。
然后获取对应的Gas fees, 转账一般需要最低gas是 21000
然后gasPrice去下面的网站查找,找到之后可以给高一点
Ethereum Gas Tracker
去查看当前的GAS是多少

根据上面的数据组装一下参数
1 2 3 4 5 6 7 8 9 10
| let tx = { from: "0xd6cc8a078ef9081ad86210cca052923437f260c5", to: "0x4bf60761fb54588cad44c146d2e2632763c6cf36", nonce: 97, value: 0, input: "0x", gas: "21000", gasPrice: "30000000000", };
|
然后填入一下代码,运行即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| import dotenv from "dotenv"; import { createAlchemyWeb3 } from "@alch/alchemy-web3"; const PRO_PUBLIC_KEY = const PRO_PRIVATE_KEY =
(async () => { const web3 = new createAlchemyWeb3(process.env.MAINNET);
let tx = { from: , to: "", nonce: YOUR_HASH_NOCE, value: 0, input: "0x", gas: "", gasPrice: "", };
const signPromise = await web3.eth.accounts.signTransaction( tx, PRO_PRIVATE_KEY ); const res = await web3.eth.sendSignedTransaction( signPromise.rawTransaction, async (err, hash) => { if (!err) { console.log("The hash of your transaction is: ", hash); const transaction = await web3.eth.getTransaction(hash); console.log(transaction); } else { console.log("error", err); } } );
console.log(res); })();
|
这样就会用更高的gas去取消链上的交易,取消之后你就可以重新设置合理的gas去进行下一笔交易了。当然你也可以选择使用代码去加速交易,同理只需要更改input、gas、gasprice的数据即可。
