Skip to main content

主网分叉模拟交易

主网分叉模拟交易是指在本地分叉一条和主网一样的环境。这样就有利于我们做一些合约调试或者测试。比如我们想要测试一个空投到我们账号的 token 是不是一个貔貅盘(即只能买不能卖的代币)。又不敢直接在主网上授权交易。那么就可以通过本地主网分叉模拟交易做一下测试。

hardhat 中设置主网分叉

  1. hardhat.config.ts中添加以下配置

首先去alchemy申请一个KEY。alchemy 是一个类似Infura的服务

networks: {
hardhat: {
forking: {
url: `https://eth-mainnet.alchemyapi.io/v2/${process.env.ALCHEMY_KEY}`, // ALCHEMY_KEY即alchemy申请的KEY
blockNumber: 15054876, // 开始分叉的区块,如果不填,则从0区块开始分叉
},
},
},

现在当我们使用hardhat本地节点时,就会自动从15054876生成一条主网环境一样的分叉链

  1. ts脚本中模拟链上账号

如果我们想要模拟某个别人的账号进行交易,则可以通过一下方式进行模拟

import hre from "hardhat";
// 冒充某个账号地址
await hre.network.provider.request({
method: "hardhat_impersonateAccount",
params: [account1Address], // 填写要模拟账号的地址
});

// 根据冒充地址,获取signer
const signer = await ethers.provider.getSigner("0x364d6D0333432C3Ac016Ca832fb8594A8cE43Ca6")
signer.sendTransaction(...)

// 停止冒充某个地址
await hre.network.provider.request({
method: "hardhat_stopImpersonatingAccount",
params: ["0x364d6D0333432C3Ac016Ca832fb8594A8cE43Ca6"]}
)

// 重置fork
await network.provider.request({
method: "hardhat_reset",
params: []
})

Fork BSC 网络

networks: {
hardhat: {
forking: {
url: "https://rpc.ankr.com/bsc",
blockNumber: 23914936,
},
},
},

参考文档