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

Solidity新手搭建投票Dapp时遭遇Invalid Opcode Error问题求助

Fixing Invalid Opcode Error for Your Voting Dapp

Hey there! I’ve dealt with this exact error when working with older Solidity and web3.js versions, so let’s break down the most likely fixes tailored to your setup:

1. Fix Your Incomplete Contract Constructor

Your code cuts off at function Voting(bytes...—this unfinished constructor is almost certainly causing the invalid opcode error. In Solidity ^0.4.18, constructors (using the old "same-as-contract-name" syntax) need full, valid definitions, and you must specify storage locations for reference types like arrays.

Here’s the corrected, complete version of your contract:

pragma solidity ^0.4.18;

contract Voting {
    mapping (bytes32 => uint8) public votesReceived;
    bytes32[] public candidateList;

    // Complete constructor to initialize candidate list
    function Voting(bytes32[] memory _candidateList) public {
        candidateList = _candidateList;
    }

    // Core voting functions (add these to make the contract functional)
    function voteForCandidate(bytes32 candidate) public {
        require(validCandidate(candidate));
        votesReceived[candidate] += 1;
    }

    function totalVotesFor(bytes32 candidate) public view returns (uint8) {
        require(validCandidate(candidate));
        return votesReceived[candidate];
    }

    function validCandidate(bytes32 candidate) public view returns (bool) {
        for(uint i = 0; i < candidateList.length; i++) {
            if (candidateList[i] == candidate) {
                return true;
            }
        }
        return false;
    }
}

Even small syntax gaps (like missing brackets or incomplete parameters) can generate broken bytecode that triggers opcode errors.

2. Match Solc Compilation Version to Your Pragma

When compiling with solc, explicitly specify the version matching your contract’s pragma solidity ^0.4.18 to avoid compatibility issues. If using the command line, run:

solcjs --version 0.4.18 --bin --abi Voting.sol -o build/

Using a newer solc version to compile an older contract produces bytecode that can break on ganache-cli.

3. Correct Web3.js v0.20.2 Deployment Parameters

Web3.js v0.20.2 uses a different deployment pattern than modern versions, and incorrect constructor parameters are a common error source. Follow these rules:

  • Convert candidate strings to bytes32 with web3.fromAscii()
  • Pass constructor arguments properly in the new() method
  • Set a sufficient gas limit (4.7 million is safe for this contract)

Example deployment code:

const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

// Load compiled ABI and bytecode
const votingABI = require('./build/Voting.abi');
const votingBytecode = '0x' + require('./build/Voting.bin');

const VotingContract = web3.eth.contract(votingABI);

// Deploy with properly formatted candidate list
VotingContract.new(
    [web3.fromAscii('Alice'), web3.fromAscii('Bob')],
    {
        from: web3.eth.accounts[0],
        gas: 4700000,
        data: votingBytecode
    },
    (err, contract) => {
        if (err) {
            console.error('Deployment error:', err);
            return;
        }
        // Wait for mining (contract.address is undefined until then)
        if (contract.address) {
            console.log('Contract deployed at:', contract.address);
        }
    }
);

4. Verify Ganache-CLI Setup

Run ganache-cli with default settings—avoid custom gas limits or fork parameters that alter EVM behavior. Start it with:

ganache-cli

This gives you a clean test chain with 10 pre-funded accounts, which works seamlessly with web3.js v0.20.2.

Final Quick Checks

  • Validate your contract syntax in Remix (a web-based Solidity IDE) to catch hidden errors
  • Confirm your web3 script loads the correct compiled bytecode and ABI
  • Ensure you’re deploying from a ganache account with enough ETH (all default accounts have 100 ETH)

内容的提问来源于stack exchange,提问作者ameya.dubey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:54:07