这不是解决方案,这是解决方法。
这些是错误,因为一些 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 合约并尝试运行它们。这里有一些技巧可以添加你的合约并创建一个实例。
- 将您的合同 ABI 添加到
src/config/abi/<your name>.json
- 将您的合约地址添加到
src\config\constants\contracts.ts
. 按照其他合约地址的样式,将 57 属性留空。例如
export default {
contractName: {
56: '',
97: '0x0000000000000000000000000000000000',
},
}
- 将您的地址获取函数添加到
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)
- 使用钩子名称调用 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();