尝试在本地 ganache eth 分支上调用 Uniswap V2 Factory 合约上的函数,而不是收到我无权访问存档状态的错误

Trying to call a function on Uniswap V2 Factory contract on local ganache eth fork, instead getting error that I have no access to archive state

我正在尝试使用 Truffle 在 JS 脚本中调用一个简单的视图函数 allPairsLength(),但我在 运行 脚本中收到以下错误:Error: Returned error: project ID does not have access to archive state.

代码如下:

const V2FACTORY = "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f";
const V2PAIR = "0x3356c9A8f40F8E9C1d192A4347A76D18243fABC5";
const V2ROUTER2 = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D";

const V3QUOTER = "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6";

const Ifactory = artifacts.require("UniswapV2Factory");
const IPairV2 = artifacts.require("UniswapV2Pair");
const IRouter02V2 = artifacts.require("UniswapV2Router02");
const IQuoter = artifacts.require("Quoter");

module.exports = async function getNoOfPairs() {
    let instance = await Ifactory.at(V2FACTORY);
    let numberOfPairs = await instance.allPairsLength();
    console.log(numberOfPairs);
};

有人能给我指出正确的方向吗?非常感谢!

我从你的评论中看到你使用 Infura 提供商分叉了一个 public 网络。

Infura 仅提供有限数量的过去区块。目前大约有200个街区。因此,如果您在第 1000 个区块分叉网络,而当前区块变为 1200,他们将不会再为您提供任何数据,因为它已超过限制。

解决方案:只需重新初始化本地分叉,以便它从较新的区块中分叉出来。