0

我正在本地主机上测试 Pancakeswap v2 前端存储库,但无法切换到测试网。(https://github.com/pancakeswap/pancake-frontend)当我更新NEXT_PUBLIC_CHAIN_ID = "56"NEXT_PUBLIC_CHAIN_ID = "97"哪个对测试网有效时出现错误。

未处理的运行时错误错误:调用还原异常(method="canClaim(address)",errorArgs=null,errorName=null,errorSignature=null,reason=null,code=CALL_EXCEPTION,version=abi/5.5.0)

未处理的运行时错误错误:调用还原异常 (method="aggregate((address,bytes)[])",errorArgs=null,errorName=null,errorSignature=null,reason=null,code=CALL_EXCEPTION,version=abi/5.5。 0)

如何将 Pancakeswap V2 与 bsc 测试网或 kovan 测试网一起使用?

4

1 回答 1

0

这不是解决方案,这是解决方法
这些是错误,因为一些 pancakeswap 合约没有部署在测试网上。你可以看到src\config\constants\contracts.ts.
我建议使用您的测试网的解决方法,这不是chef-jojo解释的解决方案。
厨师乔乔评论 解决方法很简单。您需要更新一些文件。其中最重要的是.env.development这些是我们需要更改的环境变量。

NEXT_PUBLIC_CHAIN_ID = "56"
NEXT_PUBLIC_NODE_1 = "https://bsc-dataseed1.ninicoin.io"
NEXT_PUBLIC_NODE_2 = "https://bsc-dataseed1.defibit.io"
NEXT_PUBLIC_NODE_3 = "https://bsc-dataseed.binance.org"
NEXT_PUBLIC_NODE_PRODUCTION = "https://nodes.pancakeswap.com"

对于 BscTestnet,链 id 是97. 您可以从https://docs.binance.org/smart-chain/developer/rpc.html检查 RPC 。我选择前三个并替换它们。我们不需要,NEXT_PUBLIC_NODE_PRODUCTION 因此我们将在测试网上的开发中对此进行评论。
更改后它看起来像这样。

NEXT_PUBLIC_CHAIN_ID = "97"
NEXT_PUBLIC_NODE_1 = "https://data-seed-prebsc-1-s1.binance.org:8545"
NEXT_PUBLIC_NODE_2 = "https://data-seed-prebsc-2-s1.binance.org:8545"
NEXT_PUBLIC_NODE_3 = "https://data-seed-prebsc-1-s2.binance.org:8545"

# ; NEXT_PUBLIC_NODE_PRODUCTION = "https://nodes.pancakeswap.com"

您的钱包现在将连接到 bscTestnet,您也可以使用它进行交易。浏览器仍会显示call revert exception,但您只需单击右上角的十字按钮即可忽略它们。
您可以添加您的链 id 97 合约并尝试运行它们。这里有一些技巧可以添加你的合约并创建一个实例。

  1. 将您的合同 ABI 添加到src/config/abi/<your name>.json
  2. 将您的合约地址添加到src\config\constants\contracts.ts. 按照其他合约地址的样式,将 57 属性留空。例如
    export default {
      contractName: {
        56: '',
        97: '0x0000000000000000000000000000000000',
      },
    }
    
  3. 将您的地址获取函数添加到src\utils\addressHelpers.ts. 例如
    export const getContractNameAddress = () => {
      return getAddress(addresses.mockToken);
    };
    
  4. 将您的合同 getter 函数添加到src\utils\contractHelpers.ts. 从步骤 1 导入您的 Abi。例如
    export const getMockTokenContract = (
      signer?: ethers.Signer | ethers.providers.Provider
    ) => {
      return getContract(contractNameAbi, getContractNameAddress(), signer);
    };
    
  5. 将您的合同挂钩添加到src\hooks\useContract.ts. 例如
    export function useContractNameContract(): Contract | null {
      const { library } = useActiveWeb3React();
      return useMemo(() => getContractNameContract(library.getSigner()), [library]);
    }
    
  6. 现在使用第 6 步中的钩子来获取您的合同。例如
    const contract = useContractNameContract();
    
  7. 像这样调用读取函数,<contract name>.<contact function>(<parameters separated with comma>)例如
    contract.balanceOf("0x000000000000").then(console.info)
    
  8. 使用钩子名称调用 write 函数useCallWithGasPrice。确保您的钱包在通话前已连接。例如
    const { callWithGasPrice } = useCallWithGasPrice();
    const contract = useContractNameContract();
    const callingFunction = async () => {
      const tx = await callWithGasPrice(contract, "balanceOf", ["0x000000000000000"]);
      const receipt = tx.wait();
      console.info(`Called for balanceOf: `, receipt)
      return receipt;
    };
    
    // call the function
    callingFunction();
    
于 2022-01-22T12:00:29.267 回答