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

Ethers.js调用合约getCandidates接口遇数据解码失败错误求助

问题分析与解决方案

问题情况

前端调用合约获取候选人时持续报错,错误信息:

Error: could not decode result data (value="0x", info={ "method": "getCandidates", "signature": "getCandidates()" }, code=BAD_DATA, version=6.6.2)

调用contract.candidates(0)也出现相同错误。

前端代码

import { ethers } from 'ethers';
import Election from '../../artifacts/contracts/Elections.sol/Election.json';

export default async function getContract() {
  const provider = new ethers.BrowserProvider((window as any).ethereum);
  const contractAddress = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
  const accounts = await provider.send('eth_requestAccounts', []);
  const signer = await provider.getSigner(accounts[0]);
  const contract = new ethers.Contract(contractAddress, Election.abi, signer);
  const rx = await contract.getCandidates();
  console.log(contract);
  return contract;
}

合约相关代码

mapping(uint256 candidateCount => Candidate) public candidates;
function getCandidates() public view returns (Candidate[] memory) {
        Candidate[] memory allCandidates = new Candidate[](candidateCount);

        for (uint256 i = 0; i < candidateCount; i++) {
            allCandidates[i] = candidates[i];
        }

        return allCandidates;
    }

解决步骤

1. 修正合约映射语法错误

你的映射定义存在语法问题,Solidity中映射的正确格式为mapping(键类型 => 值类型),应修改为:

mapping(uint256 => Candidate) public candidates;

语法错误会导致合约编译异常,部署后无法正常读写数据,修正后需重新编译并部署合约。

2. 确保ABI与链上合约匹配

前端导入的Election.json必须是修正后合约重新编译生成的ABI文件。如果本地ABI与链上部署的合约ABI不匹配,会直接导致返回数据解码失败。可以通过区块浏览器查看链上合约的ABI,和本地文件做对比。

3. 校验candidateCount变量逻辑

getCandidates函数依赖candidateCount变量,但目前代码中未体现该变量的定义与更新逻辑:

  • 必须显式定义uint256 public candidateCount;
  • 在添加候选人的函数中,每次新增候选人后执行candidateCount++;,确保变量值与实际候选人数量一致。

4. 确认合约地址与网络匹配

  • 检查contractAddress是否为最新部署的修正后合约地址,避免使用旧的错误合约地址。
  • 确保钱包连接的网络和合约部署的网络完全一致(比如本地Hardhat节点、Goerli测试网等),跨网络调用会返回空值0x。

5. 调试验证

可以通过区块浏览器直接调用链上合约的getCandidates方法:

  • 如果链上调用也失败,说明合约本身逻辑仍有问题;
  • 如果链上能正常返回数据,再排查前端ABI导入或调用逻辑的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:33:21