Ошибка: требуемый газ превышает норму или всегда завершается сбоем транзакции в chrome-extension

Я использую Remix, Metamask, ROPSTEN и не могу развернуть какой-либо контракт... всегда получаю одно и то же сообщение... раньше оно работало... больше не работает... бывает на разных машинах, бывает с Chrome или Firefox ...похоже, это связано с процедурой оценки...

ОЦЕНКА ГАЗА НЕ ПРОШЛА

Произошла ошибка оценки газа со следующим сообщением (см. ниже). Выполнение транзакции, скорее всего, завершится ошибкой. Вы хотите принудительно отправить? Ошибка: требуемый газ превышает норму или всегда завершается сбоем транзакции в chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:1723632 в chrome-

Дайте мне знать, если у вас есть аналогичная настройка, и она работает... или какие-либо известные проблемы...

Спасибо !

Вот код:

pragma solidity ^0.4.20;
contract Ballot {

    struct Voter {
        uint weight;
        bool voted;
        uint8 vote;
        address delegate;
    }
    struct Proposal {
        uint voteCount;
    }

    address chairperson;
    mapping(address => Voter) voters;
    Proposal[] proposals;

    /// Create a new ballot with $(_numProposals) different proposals.
    function Ballot(uint8 _numProposals) public {
        chairperson = msg.sender;
        voters[chairperson].weight = 1;
        proposals.length = 3;
    }

    /// Give $(toVoter) the right to vote on this ballot.
    /// May only be called by $(chairperson).
    function giveRightToVote(address toVoter) public {
        if (msg.sender != chairperson || voters[toVoter].voted) return;
        voters[toVoter].weight = 1;
    }

    /// Delegate your vote to the voter $(to).
    function delegate(address to) public {
        Voter storage sender = voters[msg.sender]; // assigns reference
        if (sender.voted) return;
        while (voters[to].delegate != address(0) && voters[to].delegate != msg.sender)
            to = voters[to].delegate;
        if (to == msg.sender) return;
        sender.voted = true;
        sender.delegate = to;
        Voter storage delegateTo = voters[to];
        if (delegateTo.voted)
            proposals[delegateTo.vote].voteCount += sender.weight;
        else
            delegateTo.weight += sender.weight;
    }

    /// Give a single vote to proposal $(toProposal).
    function vote(uint8 toProposal) public {
        Voter storage sender = voters[msg.sender];
        if (sender.voted || toProposal >= proposals.length) return;
        sender.voted = true;
        sender.vote = toProposal;
        proposals[toProposal].voteCount += sender.weight;
    }

    function winningProposal() public constant returns (uint8 _winningProposal) {
        uint256 winningVoteCount = 0;
        for (uint8 prop = 0; prop < proposals.length; prop++)
            if (proposals[prop].voteCount > winningVoteCount) {
                winningVoteCount = proposals[prop].voteCount;
                _winningProposal = prop;
            }
    }
}

Лимит газа: 3000000 Стоимость: 1 эфир

Посмотрите, сможете ли вы развернуть это в ROPSTEN...

Вероятно, это проблема с вашим кодом, которая приводит к постоянному сбою tx. Поделитесь кодом контракта и параметрами транзакции.
Я успешно развернул ваш контракт на ropsten без изменений.

Ответы (2)

В вашем коде отсутствует constructor()функция, см. здесь .

Он использует старый синтаксис function Ballot(), но даже в этом случае это не должно приводить к сбою.

ваш код отлично работает на моей машине.

1) Я предполагаю, что у компиляции Remix есть некоторые проблемы, создание нового файла Solidity с тем же кодом и его повторное развертывание может помочь. 2) также попробуйте перезагрузить Chrome (вкладка Remix) 3) в противном случае переустановите Metamask.

Надеюсь, поможет!