如何 运行 PancakeSwap V2 与测试网?

How to run PancakeSwap V2 with testnet?

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

Unhandled Runtime Error Error: call revert exception (method="canClaim(address)", errorArgs=null, errorName=null, errorSignature=null, reason=null, code=CALL_EXCEPTION, version=abi/5.5.0)

Unhandled Runtime Error Error: call revert exception (method="aggregate((address,bytes)[])", errorArgs=null, errorName=null, errorSignature=null, reason=null, code=CALL_EXCEPTION, version=abi/5.5.0)

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

2022 年 3 月更新
Pancakeswap 现在包括测试网 :)

旧答案

这不是解决方案,这是解决方法
这些是错误,因为一些 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,但您只需单击右上角的叉号按钮即可忽略它们。
你可以添加你的 chain id 97 合约并尝试 运行 它们。这里有一些技巧可以添加您的合同并创建一个实例。

  1. src/config/abi/<your name>.json
  2. 中添加您的合约 ABI
  3. src\config\constants\contracts.ts中添加你的合约地址。按照其他合约地址的样式,将57属性留空。例如
    export default {
      contractName: {
        56: '',
        97: '0x0000000000000000000000000000000000',
      },
    }
    
  4. 将您的地址 getter 功能添加到 src\utils\addressHelpers.ts。例如
    export const getContractNameAddress = () => {
      return getAddress(addresses.mockToken);
    };
    
  5. 将您的合约 getter 功能添加到 src\utils\contractHelpers.ts。从第 1 步导入您的 Abi。例如
    export const getMockTokenContract = (
      signer?: ethers.Signer | ethers.providers.Provider
    ) => {
      return getContract(contractNameAbi, getContractNameAddress(), signer);
    };
    
  6. src\hooks\useContract.ts 中添加您的合同挂钩。例如
    export function useContractNameContract(): Contract | null {
      const { library } = useActiveWeb3React();
      return useMemo(() => getContractNameContract(library.getSigner()), [library]);
    }
    
  7. 现在使用第 6 步中的挂钩获取您的合同。例如
    const contract = useContractNameContract();
    
  8. 像这样调用读取函数<contract name>.<contact function>(<parameters separated with comma>) 例如
    contract.balanceOf("0x000000000000").then(console.info)
    
  9. 使用钩子名称调用写入函数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();