前言

最近在主网测试一些交易的时候,想用更低的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的数据即可。