Ошибка: требуемый газ превышает допустимый или всегда неудачная транзакция - web3js - PullRequest
0 голосов
/ 26 сентября 2019

Я получаю следующую ошибку, когда пытаюсь развернуть смартконтракт с помощью web3js.Но если я разверну тот же контракт, используя консоль Truffle или geth, развертывание завершится успешно.

Error: gas required exceeds allowance or always failing transaction

Код надежности Smart Contract:

pragma solidity >=0.4.25 <0.6.0;

contract Election {

    // Model a Candidate
    struct Candidate {
        uint id;
        string name;
        uint voteCount;
    }

    // Store accounts that have voted
    mapping(address => bool) public voters;

    // voted event
    event votedEvent (
        uint indexed _candidateId
    );

    // Store Candidates
    // Read Candidate
    mapping(uint => Candidate) public candidates;

    // Store Candidates count
    uint public candidatesCount;

    // Constructor
    constructor() public{
        addCandidate('ABC');
        addCandidate('XYZ');
        addCandidate('PQR');
    }

    function addCandidate(string memory _name) private{
        candidatesCount++;
        candidates[candidatesCount] = Candidate(candidatesCount, _name, 0);
    }

    function vote(uint _candidateId) public{
        // require that they haven't voted before
        require(!voters[msg.sender]);

        // require a valid candidate
        require(_candidateId > 0 && _candidateId <= candidatesCount);

        // record that voter has voted
        voters[msg.sender] = true;

        // update candidate vote Count
        candidates[_candidateId].voteCount ++;

        // trigger voted event
        emit votedEvent(_candidateId);
    }
}

Ниже приведен код,Я использую для развертывания smartcontract:

const provider = new HDWalletProvider(mnemonic, nodeAccessToken, 1);
    const web3 = new Web3(provider);

    const contract = new web3.eth.Contract(abi);
    const accounts = await web3.eth.getAccounts();
    try{
        const deployedContract = await contract.deploy({
            data: '0x' + bytecodeData,    // Adding '0x' since generated bytecodedata doesn't have '0x' prefix.
            arguments: args
        });

        let result = await deployedContract.send({
            from: accounts[0],
            gasPrice: 0
        })
    }catch(e){}

Кто-нибудь еще сталкивался с такой же проблемой?

...