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