You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Next.js+Hardhat的首个Solidity DApp调用getProposalCount()报错求助

解决Next.js + Hardhat开发Solidity DApp的核心问题

1. 调用getProposalCount()触发CALL_EXCEPTION

排查与修复:

  • 核对合约地址:确保前端初始化合约时使用的地址,和npx hardhat node终端输出的部署地址完全一致,注意不要复制错误字符
  • 验证ABI有效性:重新执行npx hardhat compile生成最新ABI,替换前端导入的旧ABI文件——合约修改后未重新编译会导致ABI不匹配,触发调用异常
  • 匹配链ID:Hardhat本地节点默认链ID为31337,将前端连接的钱包(如MetaMask)切换至该链ID,跨链调用必然失败
  • 检查函数可见性:确保getProposalCount()被声明为public或external,Solidity私有/内部函数不支持外部调用。示例修正:
// 合约中修改函数可见性
public uint256 getProposalCount() {
    return proposals.length;
}

2. 部署时proposalNames仅能传入"1",数组格式失败

排查与修复:

  • 确认合约构造函数参数类型:若合约构造函数期望string[]类型,部署脚本必须传入字符串数组,而非单个字符串或BigNumber数组。正确合约构造函数示例:
constructor(string[] memory _proposalNames) {
    for (uint256 i = 0; i < _proposalNames.length; i++) {
        proposals.push(Proposal({name: _proposalNames[i], voteCount: 0}));
    }
}
  • 修正部署脚本参数:在Hardhat部署脚本中传入字符串数组,示例:
// deploy.js
async function main() {
  const VotingContract = await ethers.getContractFactory("VotingContract");
  // 传入字符串数组作为构造函数参数
  const votingContract = await VotingContract.deploy(["提案A", "提案B", "提案C"]);
  await votingContract.deployed();
  console.log("合约部署地址:", votingContract.address);
}
  • 若使用TypeScript,确保参数类型标注正确:
const votingContract = await VotingContract.deploy(["提案A", "提案B"] as string[]);

3. index.tsx中useEffect内console.log无输出

排查与修复:

  • 检查依赖数组:若useEffect依赖数组为空,仅在组件挂载时执行;若依赖项未变化,不会触发。需添加正确的依赖项(如合约实例、加载状态),示例:
// index.tsx
useEffect(() => {
  // 仅当合约实例存在时执行
  if (!votingContract) return;
  console.log("合约实例已加载:", votingContract.address);
  // 后续调用合约函数逻辑
}, [votingContract]);
  • 确认组件渲染:检查index.tsx是否为路由默认组件,未被条件渲染逻辑(如登录判断)阻止加载
  • 检查控制台过滤:打开浏览器控制台,确保未勾选过滤Info级别日志,避免日志被隐藏
  • 异步逻辑排查:若useEffect内包含异步操作,需确保console.log在正确位置,示例:
useEffect(() => {
  const fetchData = async () => {
    console.log("开始执行异步操作");
    try {
      const count = await votingContract.getProposalCount();
      console.log("提案数量:", count.toString());
    } catch (err) {
      console.error("调用失败:", err);
    }
  };
  fetchData();
}, [votingContract]);

内容的提问来源于stack exchange,提问作者Blake Lucey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:33:20